<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Annotation PK Interface

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

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

    另一方面,Hurb Sutter說各種編程范式,包括面向對象,核心都是某種管理依賴性,降低依賴性的技術,那么.Net Attribute, XDoclet, Java Annotation代表的Attribute Oriented Programming在降低依賴性上又前進了多少呢?

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

    1,調用方式

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

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

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

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

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

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

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

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

    Annotation Interface
    被Annotation標注的類 使用了Annotation的客戶 不使用Annotation的客戶 實現Interface的類 使用Interface的客戶 不使用Interface的客戶
    Yes Yes No Yes Yes No

    6,對“被Annotation標注的類不再被標注”或“實現Interface的類不再實現Interface”這類更改的依賴

    Annotation Interface
    被Annotation標注的類 使用了Annotation的客戶 不使用Annotation的客戶 實現Interface的類 使用Interface的客戶 不使用Interface的客戶
    Yes No No Yes Yes No

     

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

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


    評論

    # re: Annotation PK Interface  回復  更多評論   

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

    現在又多了annotation這種方式,和annotation和xml的PK.....

    # re: Annotation PK Interface  回復  更多評論   

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

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

    侵入性就更少了;

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

    # re: Annotation PK Interface  回復  更多評論   

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

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

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


    網站導航:
     
    主站蜘蛛池模板: av成人免费电影| 亚洲爆乳AAA无码专区| 2022免费国产精品福利在线| 四虎成人精品在永久免费| 亚洲另类自拍丝袜第五页 | 美女的胸又黄又www网站免费| 三年片在线观看免费观看高清电影| 久久被窝电影亚洲爽爽爽| a毛片免费在线观看| 亚洲成a人片77777老司机| 毛片在线播放免费观看| 91亚洲va在线天线va天堂va国产| 91福利免费视频| 亚洲成aⅴ人在线观看| 毛片高清视频在线看免费观看| 亚洲狠狠成人综合网| 国产精品免费视频一区| jizz免费在线影视观看网站| 久久精品国产亚洲av麻豆| 国产国产人免费视频成69堂| 亚洲日本一线产区和二线产区对比| 国产成人精品免费直播| 中文字幕乱理片免费完整的| 色噜噜综合亚洲av中文无码| 青苹果乐园免费高清在线| 国产成人亚洲综合在线| 久久夜色精品国产亚洲| 99无码人妻一区二区三区免费| 久久亚洲AV成人无码国产最大| 狠狠亚洲婷婷综合色香五月排名| 日韩精品人妻系列无码专区免费| 久久精品国产亚洲αv忘忧草| 在线a亚洲v天堂网2018| 久久综合九色综合97免费下载| 亚洲 日韩经典 中文字幕| 亚洲人成网站在线观看青青| 91香蕉国产线在线观看免费| 亚洲国产成人久久综合| 亚洲AV永久精品爱情岛论坛| 好男人看视频免费2019中文| 国精产品一区一区三区免费视频|