<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 56, comments - 77, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Annotation PK Interface

    Posted on 2005-09-16 08:19 切爾斯基 閱讀(2421) 評論(3)  編輯  收藏

    Interface在OO中處于核心地位,針對接口編程更是OOP的核心原則之一,但即使將該原則貫徹到底的COM/CORBA,依然面對大量的依賴、耦合,牽一接口而動全部客戶的修改

    另一方面,Hurb Sutter說各種編程范式,包括面向?qū)ο螅诵亩际悄撤N管理依賴性,降低依賴性的技術(shù),那么.Net Attribute, XDoclet, Java Annotation代表的Attribute Oriented Programming在降低依賴性上又前進了多少呢?

    以Java Annotation為例,與Java Interface做個對比

    1,調(diào)用方式

    實現(xiàn)Interface的類 被Annotation標(biāo)注的類
    Call by Signature:就像現(xiàn)實生活中的螺絲螺母,插座插頭,必須完全吻合 Call by Semantics:就像卡西利亞斯被罰下,臨時指定肥羅當(dāng)守門員一樣,肥羅并不需要實現(xiàn)GateKeeper接口,只需臨時被標(biāo)記為具有GateKeeper屬性,便可以合法的禁區(qū)內(nèi)手球

    2,名稱沖突(可看作是對函數(shù)簽名的依賴,當(dāng)然,無論Annotation還是Interface,都不允許存在完全相同的全名)

    實現(xiàn)Interface的類 被Annotation標(biāo)注的類
    Yes,無法解決從多個接口繼承來的方法具有相同簽名不同語義的問題 No,Annotation是類型,不會存在完全相同的全名

    3,編譯時依賴(對Annotation或Interface的依賴)

    Annotation Interface
    被Annotation標(biāo)注的類 使用了Annotation的客戶 不使用Annotation的客戶 實現(xiàn)Interface的類 使用Interface的客戶 不使用Interface的客戶
    Yes Yes No,只要“被Annotation標(biāo)注的類”已經(jīng)被編譯為bytecode,如以jar包的形式存在,那么使用了該類,但沒有用到Annotation的客戶,編譯時不需要依賴Annotation所在的Jar包 Yes Yes Yes,即使客戶沒有用到該類所實現(xiàn)的所有接口,編譯時該類涉及的所有接口的定義必須可見

    4,運行時依賴(對Annotation或Interface的依賴)

    Annotation Interface
    被Annotation標(biāo)注的類 使用了Annotation的客戶 不使用Annotation的客戶 實現(xiàn)Interface的類 使用Interface的客戶 不使用Interface的客戶
    No(即使RetentionPolicy是RUNTIME,我的測試中也是不依賴Annotation的,只要客戶不涉及Annotation,但我不確定RUNTIME的真正含義是什么) Yes No(其實運行時對Annotation的依賴被轉(zhuǎn)移到了客戶) Yes Yes Yes

    5,對Annotation或Interface本身更改的依賴

    Annotation Interface
    被Annotation標(biāo)注的類 使用了Annotation的客戶 不使用Annotation的客戶 實現(xiàn)Interface的類 使用Interface的客戶 不使用Interface的客戶
    Yes Yes No Yes Yes No

    6,對“被Annotation標(biāo)注的類不再被標(biāo)注”或“實現(xiàn)Interface的類不再實現(xiàn)Interface”這類更改的依賴

    Annotation Interface
    被Annotation標(biāo)注的類 使用了Annotation的客戶 不使用Annotation的客戶 實現(xiàn)Interface的類 使用Interface的客戶 不使用Interface的客戶
    Yes No No Yes Yes No

     

    總共 5 處被藍(lán)色字體標(biāo)注的地方,也就是Annotation在降低依賴性上優(yōu)于Interface的 5 個方面,也算更接近于“你不需要為你用不到的東西付出代價”這一語言和庫的設(shè)計理念

    當(dāng)然,Annotation有其它的代價,幾個潛在的可能就是“使用方便性”和“性能”


    評論

    # re: Annotation PK Interface  回復(fù)  更多評論   

    2005-09-16 15:02 by 白衣
    把使用者接口 PK掉是框架號稱無侵入的基礎(chǔ)哦。
    Spring的做法是繞一個xml文件來定義,比如定義init-method 來 PK 自己的InitializingBean接口--afterPropertiesSet()函數(shù).

    現(xiàn)在又多了annotation這種方式,和annotation和xml的PK.....

    # re: Annotation PK Interface  回復(fù)  更多評論   

    2005-09-16 15:20 by 切爾斯基
    如果能解決Source Code和Xml同步的問題(如設(shè)置init-method為void init(),過了兩天代碼中void init()被改為void before(),這時需要手工修改配置.xml),或者本質(zhì)上滿足:

    1, Annotation和被Annotation的對應(yīng)被解釋執(zhí)行(意味著修改后不必重新編譯)
    2, Annotation和被Annotation的對應(yīng)被自動同步(在任何一方修改后)

    侵入性就更少了;

    另外一種無侵入框架的技術(shù)是模板啊,呵呵,see see:
    http://blog.csdn.net/chelsea/archive/2005/08/05/446298.aspx

    # re: Annotation PK Interface  回復(fù)  更多評論   

    2005-12-21 04:33 by ajooo
    annotation也仍然要客戶代碼import這個annotation。除非該annation是標(biāo)準(zhǔn),比如Renetion之類,否則仍然不爽。

    這點上,annoation不如xml。annotation你還需要給他貼上“守門員”標(biāo)簽才行。而在xml中放meta data就相當(dāng)于教練隨心所欲,想讓誰當(dāng)守門員誰就是守門員。

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产成人精品免费视频软件| 日韩精品成人亚洲专区| 久久青青成人亚洲精品| 久久精品成人免费观看97| 免费夜色污私人影院在线观看| 美景之屋4在线未删减免费 | 亚洲一级免费毛片| 免费精品国产自产拍在线观看图片 | 日韩视频在线观看免费| 亚洲αv在线精品糸列| 久久精品乱子伦免费| 亚洲第一区视频在线观看| 18禁网站免费无遮挡无码中文| 亚洲国产精品白丝在线观看| 成人黄18免费视频| 免费大片av手机看片| 国内精品久久久久久久亚洲| 国产精品免费大片| 亚洲一卡2卡3卡4卡国产网站 | 在线观看亚洲免费视频| 免费精品国产自产拍在线观看| 中文字幕亚洲日韩无线码| 三年片在线观看免费大全电影| 国产成人亚洲合集青青草原精品| 日韩免费无砖专区2020狼| 精品国产呦系列在线观看免费| 亚洲人成电影在在线观看网色| 免费AA片少妇人AA片直播| 国产亚洲综合精品一区二区三区| 国产亚洲精品无码专区| 日本片免费观看一区二区| 校园亚洲春色另类小说合集 | 亚洲?v无码国产在丝袜线观看| 久久er国产精品免费观看8| 久久久久亚洲AV无码专区首JN | 国产亚洲一区二区手机在线观看| 免费国产黄网站在线观看视频| 亚洲AV日韩综合一区尤物| 久久久无码精品亚洲日韩软件| 67pao强力打造国产免费| 精品免费AV一区二区三区|