<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Annotation PK Interface

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

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

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

    以Java Annotation為例,與Java Interface做個(gè)對(duì)比

    1,調(diào)用方式

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

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

    實(shí)現(xiàn)Interface的類(lèi) 被Annotation標(biāo)注的類(lèi)
    Yes,無(wú)法解決從多個(gè)接口繼承來(lái)的方法具有相同簽名不同語(yǔ)義的問(wèn)題 No,Annotation是類(lèi)型,不會(huì)存在完全相同的全名

    3,編譯時(shí)依賴(lài)(對(duì)Annotation或Interface的依賴(lài))

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

    4,運(yùn)行時(shí)依賴(lài)(對(duì)Annotation或Interface的依賴(lài))

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

    5,對(duì)Annotation或Interface本身更改的依賴(lài)

    Annotation Interface
    被Annotation標(biāo)注的類(lèi) 使用了Annotation的客戶(hù) 不使用Annotation的客戶(hù) 實(shí)現(xiàn)Interface的類(lèi) 使用Interface的客戶(hù) 不使用Interface的客戶(hù)
    Yes Yes No Yes Yes No

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

    Annotation Interface
    被Annotation標(biāo)注的類(lèi) 使用了Annotation的客戶(hù) 不使用Annotation的客戶(hù) 實(shí)現(xiàn)Interface的類(lèi) 使用Interface的客戶(hù) 不使用Interface的客戶(hù)
    Yes No No Yes Yes No

     

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

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


    評(píng)論

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

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

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

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

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

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

    侵入性就更少了;

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

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

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

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

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产一精品一AV一免费| 小说区亚洲自拍另类| 国产精品网站在线观看免费传媒 | 亚洲av产在线精品亚洲第一站 | 久久综合国产乱子伦精品免费| 亚洲欧洲日产国码无码久久99| 国产亚洲精品免费视频播放| 久久亚洲国产精品123区| 精品国产污污免费网站入口 | 亚洲国产成+人+综合| 手机在线看永久av片免费| 亚洲男人的天堂久久精品| 国产精品深夜福利免费观看| 国产区图片区小说区亚洲区| 亚洲福利在线播放| 国产一二三四区乱码免费| 亚洲五月激情综合图片区| 国产福利视精品永久免费| 亚洲精品国产第一综合99久久| 免费大香伊蕉在人线国产| 特级做a爰片毛片免费看| 亚洲AV永久无码精品一百度影院| 亚洲成人免费网站| 亚洲日韩久久综合中文字幕| 全黄a免费一级毛片人人爱| 国产综合免费精品久久久| 久久精品蜜芽亚洲国产AV| 日韩激情无码免费毛片| 精品一区二区三区免费观看 | 亚洲高清国产AV拍精品青青草原| 99久久精品免费精品国产| 亚洲日本VA午夜在线影院| 亚洲一级特黄大片在线观看| 欧洲精品99毛片免费高清观看| 亚洲中文字幕AV每天更新| 亚洲视频一区二区| 一区二区三区四区免费视频| 亚洲Aⅴ在线无码播放毛片一线天| 最新国产AV无码专区亚洲| 亚洲精品动漫免费二区| 中文在线观看国语高清免费|