这两个Spring Annotation和XML配置有什么区别

时间:2012-07-25 06:51:17

标签: spring spring-mvc

这两个Spring注释和XML配置之间有什么区别

1)基于注释

@Configuration
@EnableWebMvc
public class MyWebConfig{
   // 
}

2)基于XML

<mvc:annotation-driven />

我看不出除xml和注释之外的任何其他区别。 什么时候使用哪一个?

2 个答案:

答案 0 :(得分:1)

基于注释的配置比xml中的等效配置更容易,更易读。例如,在xml中将属性设置为map,如下所示:

    <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
  • 在启动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;
    }
}
  • 许多其他人......

答案 1 :(得分:1)

@Treydone写了一些例子,并表达了关于基于Java的配置更好的主观意见。

我不同意这种说法,因为基于Java的配置和XML配置之间没有功能差异,这只是你习惯使用的习惯问题。有人说传统的XML命名空间配置更好,其他人说基于Java的配置(从3.0开始就是Spring)是Spring的下一级IoC。

BTW基于注释的配置与基于Java的配置不一样 - 您从后者编写了示例,因此我假设您在XML和Java配置之间进行选择。

我认为你应该阅读:

然后决定哪一个最适合你。

P.S。基于注释的配置比IMO更糟糕,因为它将一些依赖信息直接移动到普通类中。