这 2 个 Spring Annotation 和 XML 配置有什么区别
1) 基于注释
@Configuration
@EnableWebMvc
public class MyWebConfig{
//
}
2) 基于 XML
<mvc:annotation-driven />
除了 xml 和注释之外,我看不到任何其他区别。以及何时使用哪一个?
这 2 个 Spring Annotation 和 XML 配置有什么区别
1) 基于注释
@Configuration
@EnableWebMvc
public class MyWebConfig{
//
}
2) 基于 XML
<mvc:annotation-driven />
除了 xml 和注释之外,我看不到任何其他区别。以及何时使用哪一个?
与 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;
}
}
@Treydone 写了一些例子,并表达了关于基于 Java 的配置更好的主观意见。
我不同意这种说法,因为基于 Java 的配置和 XML 配置在功能上没有区别,只是你会使用哪一个的习惯问题。有人说传统的 XML 命名空间配置更好,也有人说基于 Java 的配置(自 Spring 3.0 起就在其中)是 Spring 中 IoC 的下一个级别。
顺便说一句,基于注解的配置与基于 Java 的配置不同 - 您从后者编写示例,所以我假设您在 XML 和 Java 配置之间进行选择。
我认为你应该阅读:
然后决定哪一个最适合你。
基于 PS Annotation 的配置是 IMO 比这两个更糟糕的选择,因为它将一些依赖信息直接移动到普通类中。