3.9 基于注解的容器配置

注解是否比XML更好地配置Spring?

引入基于注解的配置进而引发了这种方法是否比XML更好的问题。简短的答案是得看情况。长的答案是,每种方法都有其优缺点,通常由开发人员决定哪种策略更适合他们。由于它们的定义方式,注解在它们的声明中提供了很多上下文,导致更短和更简洁的配置。但是,XML擅长在不接触源码或者无需反编译的情况下组装组件。一些开发人员更喜欢在源码上使用注解配置,而另一些人认为注解类不再是POJO,此外,配置变得分散,更难以控制。

无论选择什么,Spring都可以适应这两种风格,甚至可以将它们混合在一起。值得指出的是,Spring通过其JavaConfig)选项,允许注解以无侵入方式使用,无需接触目标组件源代码,而且在工具方面,Spring Tool Suite支持所有配置样式。

XML设置的替代方法是基于注解的配置,它依赖于字节码元数据来连接组件替代XML声明。开发人员通过使用相关类,方法或字段声明上的注解来将配置移动到组件类本身中,而不是使用XML描述bean的配置。如在 “Example:RequiredAnnotationBeanPostProcessor”一节中提到的 一起使用BeanPostProcessor与注解是扩展Spring IoC容器的常用手段。例如,Spring 2.0引入了使用@Required注解。 Spring 2.5使得有可能遵循同样的一般方法来驱动Spring的依赖注入。本质上,@Autowired注解提供了相同的能力,在这一章有详解 Section 3.4.5, “Autowiring collaborators”,但具有更细粒度的控制和更广泛的适用性。 Spring 2.5还添加了对JSR-250注解的支持,例如@PostConstruct@PreDestroy。 Spring 3.0增加了对javax.inject包中包含的JSR-330(Java的依赖注入)注解的支持,例如@Inject@Named。有关这些注解的详细信息,请参见相关部分.

[Note]
注解注入在 XML注入之前执行,因此同时使用这两种方式注入时,XML配置会覆盖注解配置。

和之前一样,你可以将它们注册为单独的bean定义,但也可以通过在基于XML的Spring配置中包含以下标记来进行隐式注册(注意包含“context”命名空间):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>

(隐式注册的后置处理器包括 AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor, ,以及 上述RequiredAnnotationBeanPostProcessor。)

[Note]
<context:annotation-config/>只在定义bean的相同应用程序上下文中查找bean上的注解。 这意味着,如果你在DispatcherServletWebApplicationContext中插入<context:annotation-config/>,它只会检查你的控制器中的@Autowired bean,而不是你的服务。 有关详细信息,请参见第18.2节“DispatcherServlet”

results matching ""

    No results matching ""