現在注解使用的越來越廣泛;它的主要好處是寫起來比xml要方便的多,但是它們的目的都是一樣的,元數據。
我的理解:
注解:是一種分散式的元數據,與源代碼緊綁定。
xml:是一種集中式的元數據,與源代碼無綁定。
因此注解和XML的選擇上可以從兩個角度來看:分散還是集中,源代碼綁定/無綁定。
注解的缺點:
1、很多朋友比如在使用spring注解時,會發現注解分散到很多類中,不好管理和維護;這個其實要借助工具,我目前使用的是IDEA,它在這方面表現的非常好;當然現在還有Spring的STS,也是不錯的; 所以借助工具,能解決這個問題;
2、注解的開啟/關閉必須修改源代碼,因為注解是源代碼綁定的,如果要修改,需要改源碼,這個有這個問題,所以如果是這種情況,還是使用XML配置方式;比如數據源;
3、注解還一個缺點就是靈活性,比如在之前翻譯的Spring Framework 4.0 M1: WebSocket 支持;在實現復雜的邏輯上,沒有XML來的更加強大;注解就是要么用,要么不用,比如之前的jpa bean validation,要么全,要么沒;遇到這種情況很痛苦;
4、還一種就是約定大于配置,但是在處理一些復雜的情況下,注解還是需要的(如Spring的數據驗證/數據綁定注解很強大);
5、通用配置還是走XML吧,比如事務配置,比如數據庫連接池等等,即通用的配置集中化,而不是分散化,如很多人使用@Transactional來配置事務,在很多情況下這是一種太分散化的配置;
6、XML方式比注解的可擴展性和復雜性維護上好的多,比如需要哪些組件,不需要哪些;在面對這種情況,注解掃描機制比較遜色,因為規則很難去寫或根本不可能寫出來;
注解的好處:
1、XML配置起來有時候冗長,此時注解可能是更好的選擇,如jpa的實體映射;注解在處理一些不變的元數據時有時候比XML方便的多,比如springmvc的數據綁定,如果用xml寫的代碼會多的多;
2、注解最大的好處就是簡化了XML配置;其實大部分注解一定確定后很少會改變,所以在一些中小項目中使用注解反而提供了開發效率,所以沒必要一頭走到黑;
3、注解相對于XML的另一個好處是類型安全的,XML只能在運行期才能發現問題。
注解也好,XML也好,我們還是需要一些開關/替換機制來控制特殊需求,以改變那種要么全部 要么沒有的方案。。
還一種呼聲就是約定大于配置,這種方案可能在某些場景下是最優的,但是遇到一些復雜的情況可能并不能解決問題,所以此時注解也是一個不錯的方案。尤其在使用springmvc時,好處是能體會的出的。
不管使用注解還是XML,做的事情還是那些事情,但注解和XML都不是萬能的,滿足自己的需求且已一種更簡單的方式解決掉問題即可。
就像探討一下技術問題,很多人都帶有很強的個人喜好來評判一個東西的好壞,這種探討沒有任何意義,我們最終的目的是解決方案,所以我們應該探討的是能不能解決問題,能不能以更容易理解的方式解決問題,能不能更簡單的解決問題。
不管是約定大于配置、注解還是XML配置也好,沒有哪個是最優的,在合適的場景選擇合適的解決方案這才是重要的。就像設計模式一樣:是對特定環境中重復出現的特定問題的一個經過前人驗證了的解決方案。