2012-07-25 39 views
0

的是這2春天註釋和XML配置 是什麼這2春天註釋和XML配置之間的差異

2)基於XML的

1)基於註解

@Configuration 
@EnableWebMvc 
public class MyWebConfig{ 
    // 
} 
之間的差異

<mvc:annotation-driven /> 

我看不到任何其他差異比XML和註釋。 何時使用哪一個?

+2

如果您沒有在xml中使用mvc:annotation-driven,它不會讀取您的註釋。 – 2012-07-25 06:57:11

+1

@subirkumarsao'@ EnableWebMvc' **將**讀取MVC註釋,[它們是等效的](http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html #MVC-Config中啓用)。 – Xaerxess 2012-07-25 08:36:22

回答

1

@Treydone寫了一些例子加expresse d關於基於Java的配置的主觀意見更好。

我不同意這個說法,因爲在基於Java的配置和XML配置之間沒有功能上的區別,只是你會使用哪一種習慣。有人說傳統的XML命名空間配置比較好,另外一些人則說基於Java的配置(Spring 3.0以來的版本)是Spring中IoC的下一個級別。

基於註釋的配置不是與基於Java的配置相同 - 您是從後者編寫示例的,所以我假定您在XML和Java配置之間進行選擇。

我認爲你應該閱讀:

,然後決定哪一個是最適合你。

P.S.基於註釋的配置是IMO比這兩個更糟糕的選擇,因爲它將一些依賴信息直接轉移到普通類中。

+0

@Downvoter:你能評論答案有什麼問題嗎? – Xaerxess 2012-07-26 10:03:36

1

基於註解的配置比xml中的等效配置更容易且更易讀。例如設置一個屬性作爲地圖中的xml看起來是這樣的:

<property name="maps"> 
     <map> 
      <entry key="Key 1" value="1" /> 
      <entry key="Key 2" value-ref="PersonBean" /> 
      <entry key="Key 3"> 
       <bean class="com.mkyong.common.Person"> 
        <property name="name" value="mkyongMap" /> 
        <property name="address" value="address" /> 
        <property name="age" value="28" /> 
       </bean> 
      </entry> 
     </map> 
    </property> 

在Java的配置文件,這看起來是這樣的:

Map<String, Object> maps = ... 
maps.put()... 
....setMaps(maps); 

還有許多其他優點:

  • 從一個匿名內部類型的實例中添加一個bean

  • 查看錯誤du響彙編,開始你的Spring上下文和你的tomcat之前...

  • 在bean建設

添加一些條件,例如:

@Bean 
public ViewResolver internalResourceViewResolver() { 
    ClassLoader classLoader = getClass().getClassLoader(); 
    if (ClassUtils.isPresent("org.apache.tiles.TilesContainer", classLoader)) { 
     TilesViewResolver viewResolver = new TilesViewResolver(); 
     return viewResolver; 
    } else { 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setPrefix("/"); 
     viewResolver.setSuffix(".jsp");   
     return viewResolver; 
    } 
} 
  • 許多其他.. ..