Spring的注解配置與XML配置之間的比較
注釋配置相對於 XML 配置具有很多的優勢:
它可以充分利用 Java 的反射機制獲取類結構信息,這些信息可以有效減少配置的工作。
如:使用 JPA 注釋配置 ORM 映射時,我們就不需要指定 PO 的屬性名、類型等信息,如果關系表字段和 PO 屬性名、類型都一致,您甚至無需編寫任務屬性映射信息——因為這些信息都可以通過 Java 反射機制獲取。
注釋和 Java 代碼位於一個文件中,而 XML 配置采用獨立的配置文件,大多數配置信息在程序開發完成后都不會調整,
如果配置信息和 Java 代碼放在一起,有助於增強程序的內聚性。而采用獨立的 XML 配置文件,程序員在編寫一個功能時,往往需要在程序文件和配置文件中不停切換,這種思維上的不連貫會降低開發效率。
因此在很多情況下,注釋配置比 XML 配置更受歡迎,注釋配置有進一步流行的趨勢。Spring 2.5 的一大增強就是引入了很多注釋類,現在您已經可以使用注釋配置完成大部分 XML 配置的功能。
注釋配置和 XML 配置的適用場合
是否有了這些 IOC 注釋,我們就可以完全摒除原來 XML 配置的方式呢?答案是否定的。有以下幾點原因:
注釋配置不一定在先天上優於 XML 配置。如果 Bean 的依賴關系是固定的,(如 Service 使用了哪幾個 DAO 類),這種配置信息不會在部署時發生調整,那么注釋配置優於 XML 配置;反之如果這種依賴關系會在部署時發生調整,XML 配置顯然又優於注釋配置,因為注釋是對 Java 源代碼的調整,您需要重新改寫源代碼並重新編譯才可以實施調整。
如果 Bean 不是自己編寫的類(如 JdbcTemplate、SessionFactoryBean 等),注釋配置將無法實施,此時 XML 配置是唯一可用的方式。
注釋配置往往是類級別的,而 XML 配置則可以表現得更加靈活。比如相比於 @Transaction 事務注釋,使用 aop/tx 命名空間的事務配置更加靈活和簡單。
所以在實現應用中,我們往往需要同時使用注釋配置和 XML 配置,對於類級別且不會發生變動的配置可以優先考慮注釋配置;而對於那些第三方類以及容易發生調整的配置則應優先考慮使用 XML 配置。Spring 會在具體實施 Bean 創建和 Bean 注入之前將這兩種配置方式的元信息融合在一起。
XML配置的優缺點:
優點有:
1. XML配置方式進一步降低了耦合,使得應用更加容易擴展,即使對配置文件進一步修改也不需要工程進行修改和重新編譯。
2. 在處理大的業務量的時候,用XML配置應該更加好一些。因為XML更加清晰的表明了各個對象之間的關系,各個業務類之間的調用。同時spring的相關配置也能一目了然。
當然,有人會說,用XML配置,在大的業務量時候會使得XML文件過大,不容易查看。這一點我們完全可以利用業務分解書寫多個XML配置文件就可以了。
缺點有:
配置文件讀取和解析需要花費一定的時間,配置文件過多的時候難以管理,無法對配置的正確性進行校驗,增加了測試難度。
annotation配置的優缺點:
優點有:
1. 在class文件中,可以降低維護成本,annotation的配置機制很明顯簡單
2. 不需要第三方的解析工具,利用java反射技術就可以完成任務
3. 編輯期可以驗證正確性,差錯變得容易
4. 提高開發效率
缺點有:
1. 如果需要對於annotation進行修改,那么要重新編譯整個工程
2. 業務類之間的關系不如XML配置那樣容易把握。
3. 如果在程序中annotation比較多,直接影響代碼質量,對於代碼的簡潔度有一定的影響