看看編程語言發展 一開始只是函數的封裝,
到了OO語言,對象有了自己的屬性和方法。
到了框架滿天飛的年代,這些屬性和方法又有了自己的屬性,來告訴框架如何為自己提供服務。比如Spring和EJB3,POJO就用配置信息來告訴框架進行無侵入服務提供(如事務)和依賴注入。
整個過程非常的自然,程序員用以描述系統的語言越來越詳細。所以Annotation普一推出就受到了熱烈追捧。那些輕量級框架喜歡它,AOP方案喜歡它,連EJB3也把寶全壓在了它身上。
不過,在annotation之前框架早已存在,只是那時候大家把信息放在XML裡,放在數據庫裡,放在POJO的屬性裡。
在那篇Spring vs EJB3的文章裡,Spring用XML,EJB3用annotaion,但明顯的,xml和annotation都有著明顯的劣勢,所以Spring和EJB3又都在快速吸收著另一種配置方法的優點,比如Spring就支持用annotation聲明事務。
基本上此的優點就是彼的弱點了。
Annotation的優點
一是不需要強力的Factory類來維護XML配置信息,不需要定位配置信息在xml文件中的位置,可以很敏捷的進行即時反射。
二是不需要割裂配置文件和POJO,維護人員不需要經常同時打開xml 和pojo文件,並定位xml信息的位置。
但Annotation也有弱點
一是需要編譯,不能動態更新。
二是真正需要割裂POJO和配置信息,不希望配置信息弄髒POJO的時候。
三是Hibernate,Struts,三姑媽,四姨婆的annotation如果一股腦兒的全堆在可憐的POJO上很沒人道,如果三姑六婆都搶Transation這個Anontation就更慘了。
四是XML處理關聯復雜,嵌套連連的時候,表達能力比annoation的強。
可見,Annotation暫時是以輕量級框架最愛的身份出現的,大家都要根據自己項目的情況進行取捨。