考慮使用JavaConfig替代XML配置

對於總是固執地使用Spring的XML配置方式,同事們總是譏諷我。是的,這看起來太二太過時了,不過XML還是有它的優勢:

1.集中式配置。這樣做不會將不同組件分散的到處都是。你可以在一個地方看到所有Bean的概況和他們的裝配關係。

2.如果你需要分割配置文件,沒問題,Spring可以做到。它可以在運行時通過<import>標籤或者上Context文件對分割的文件進行重新聚合。

3.相對於自動裝配(autowiring),只有XML配置允許顯示裝配(explicit wiring)

4.最後一點並不代表不重要,XML配置完全和JAVA文件解耦:兩種文件完全沒有耦合關係,這樣的話,類可以被用作多個不同XML配置文件。


XML唯一的問題是,只有在運行時環境時你才能發現各種配置及語法錯誤,但是如果使用Spring IDE Plugin(或者STS)的話,它會在編碼時提示這些問題。

在XML配置和直接註解式配置之外還有一種有趣的選擇方式-JavaConfig,它是在Spring 3.0開始從一個獨立的項目併入到Spring中的。它結合了XML的解耦和JAVA編譯時檢查的優點。JavaConfig可以看成一個XML文件,只不過是使用Java編寫的。相關文檔在官方網站是可以找到的,這篇文章只是帶你瞭解JavaConfig。下面的例子,讓我們將從XMl文件移植到JavaConfig。

XML配置文件:

[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  5.     
  6. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">   
  7.     
  8.     <bean id="button" class="javax.swing.JButton">   
  9.         <constructor-arg value="Hello World" />   
  10.     </bean>   
  11.     
  12.     <bean id="anotherButton" class="javax.swing.JButton">   
  13.         <property name="icon" ref="icon" />   
  14.     </bean>   
  15.     
  16.     <bean id="icon" class="javax.swing.ImageIcon">   
  17.         <constructor-arg>   
  18.             <bean class="java.net.URL">   
  19.               <constructor-arg value="http://morevaadin.com/assets/images/learning_vaadin_cover.png" />   
  20.             </bean>   
  21.         </constructor-arg>   
  22.     </bean>   
  23. </beans>  

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. import java.net.MalformedURLException;  
  2. import java.net.URL;  
  3. import javax.swing.Icon;  
  4. import javax.swing.ImageIcon;  
  5. import javax.swing.JButton;  
  6. import org.springframework.context.annotation.Bean;  
  7. import org.springframework.context.annotation.Configuration;  
  8.   
  9. @Configuration  
  10. public class MigratedConfiguration {  
  11.     @Bean  
  12.     public JButton button() {  
  13.         return new JButton("Hello World");  
  14.     }  
  15.   
  16.     @Bean  
  17.     public JButton anotherButton(Icon icon) {  
  18.         return new JButton(icon);  
  19.     }  
  20.   
  21.     @Bean  
  22.     public Icon icon() throws MalformedURLException {  
  23.         URL url = new URL(  
  24.                 "http://morevaadin.com/assets/images/learning_vaadin_cover.png");  
  25.         return new ImageIcon(url);  
  26.     }  
  27. }  


用法非常簡單:

   1.用@Configuration註解JavaConfig類,

   2.用每個方法來表示Bean並使用@Bean註解方法。

   3.每個方法名代表XML配置文件中的name


注意在Web環境中,需要在web.xml中加入如下代碼:

[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <context-param>  
  2.     <param-name>contextClass</param-name>  
  3.     <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>  
  4. </context-param>  
  5. <context-param>  
  6.     <param-name>contextConfigLocation</param-name>  
  7.     <param-value>com.packtpub.learnvaadin.springintegration.SpringIntegrationConfiguration</param-value>  
  8. </context-param>  

相關資源:

   ·Java-based容器配置文檔

   ·AnnotationConfigWebApplicationContext JavaDoc

   ·@ContextConfiguration JavaDoc(to configure Spring Test to use JavaConfig)

發佈了31 篇原創文章 · 獲贊 21 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章