0

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

1) 基于注释

@Configuration
@EnableWebMvc
public class MyWebConfig{
   // 
}

2) 基于 XML

<mvc:annotation-driven />

除了 xml 和注释之外,我看不到任何其他区别。以及何时使用哪一个?

4

2 回答 2

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;
    }
}
  • 好多其它的....
于 2012-07-25T08:05:54.193 回答
1

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

我不同意这种说法,因为基于 Java 的配置和 XML 配置在功能上没有区别,只是你会使用哪一个的习惯问题。有人说传统的 XML 命名空间配置更好,也有人说基于 Java 的配置(自 Spring 3.0 起就在其中)是 Spring 中 IoC 的下一个级别。

顺便说一句,基于注解的配置基于 Java 的配置不同 - 您从后者编写示例,所以我假设您在 XML 和 Java 配置之间进行选择。

我认为你应该阅读:

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

基于 PS Annotation 的配置是 IMO 比这两个更糟糕的选择,因为它将一些依赖信息直接移动到普通类中。

于 2012-07-25T08:34:19.873 回答