领先一步
VMware 提供培训和认证,助您加速进步。
了解更多Spring 2.5 背后的核心主题之一是全面的基于注解的配置。我们一直在讨论并撰写大量关于 @Autowired、Spring MVC 的 @RequestMapping 以及对使用 JUnit4 或 TestNG 编写的注解测试的新支持的博客。@Autowired 无疑是 Spring 2.5 中最重要的注解,可用于服务组件、Web 组件、单元测试,甚至在使用 Spring 的 @Configurable 结合 AspectJ 织入时的领域对象。Spring MVC 的 @RequestMapping 同样灵活,支持多种处理程序方法签名变体。
今天我想把重点放在不同的方面,即 Spring 支持的广泛的依赖注入注解集。以下列表包含了可在 Spring 2.5 bean 中使用的关键注解
这组注解包含了 Java EE 5 的所有通用注解,这意味着您可以在例如 Servlet 2.5 的 servlet、JSF 1.2 的托管 bean 和 Spring 的托管 bean 中使用相同的通用注解。换句话说,如果您有一些使用了注解的标准 JSF 1.2 托管 bean,您可以按原样将它们的定义从 faces-config 移到 Spring 应用上下文,而无需更改 bean 类!这是一个重要的设计目标:通过简单地选择 SpringBeanFacesELResolver 作为您的自定义 JSF ELResolver,Spring 2.5 可以直接替代标准的 JSF 1.2 托管 bean 功能。
在配置方面,您只需在 Spring 应用上下文中使用以下简单的配置元素即可启用上述完整的注解集
<context:annotation-config/>
请注意,此设置仅与依赖注入相关,不需要任何参数化。(对于自定义,可以考虑定义 Spring 的独立 AnnotationBeanPostProcessor,例如 CommonAnnotationBeanPostProcessor)。但是,annotation-config 元素不激活任何形式的代理或特殊导出。为此,Spring 提供了更具体的配置元素
<tx:annotation-driven/>
此设置激活事务注解的处理,Spring 2.5 开箱即用支持以下两种变体
旁注:与 Spring 的所有支持选项一样,EJB 3.0 TransactionAttribute 注解仅在 EJB 3.0 API 实际存在于 classpath 中时可用。Spring 会自动适应该 API 的存在,类似于 JSR-250 API 或 JPA API(如上所述)。
<tx:annotation-driven> 元素允许进行事务特定配置,例如要与之通信的 Spring PlatformTransactionManager(通过“transaction-manager”属性)以及操作的模式
<tx:annotation-driven transaction-manager="myTm" mode="aspectj"/>
事务注解处理的显式 AspectJ 模式是 Spring 2.5 中的新功能,允许使用 Spring 的 AnnotationTransactionAspect 代替传统的 AOP 代理。这需要 AspectJ 编译时织入或加载时织入,修改恰好使用了 @Transactional 注解的类的字节码。这种织入允许支持注解在任何类型的方法上:无论是 public、protected 还是 private,无论是外部调用还是对象内部的调用,事务都将始终按照注解的指定启动。这与传统的 AOP 代理形成鲜明对比,在传统的 AOP 代理中,注解驱动的事务仅限于通过代理进入的 public 方法调用。
如果您的环境支持加载时织入,那么以下配置足以启用 AspectJ 风格的事务注解处理。请注意,这需要具有内置织入支持的运行时环境(例如 WebLogic 10、OC4J 10.1.3.1、配置了 Spring 的 TomcatInstrumentableClassLoader 的 Tomcat),或者在 JVM 启动时指定 Spring 的 VM 代理(“-javaagent:spring-agent.jar”)。
<context:load-time-weaver/><tx:annotation-driven mode="aspectj"/>
<bean id="transactionManager" class="..."/>
最后,Spring 2.5 还提供了一个方便的配置元素用于激活 JMX 导出。在所有常见平台上,包括标准的 Java 5 平台 MBeanServer 以及 WebLogic 9/10 和 WebSphere 6 暴露的特殊 MBeanServer,默认的 MBeanServer 都将自动检测到。
<context:mbean-export/>
Spring 管理的 bean 可以实现标准的 MBean/MXBean 约定,符合 JMX 规范的 MBean 类,或者使用以下注解声明其管理签名(自 Spring 1.2 起已知)
这体现了 Spring 注解配置模型的真正强大之处:不同的配置关注点无缝地融合成一个统一的整体,具有一致的配置风格和统一的组件生命周期——归根结底,它仍然是一个由 Spring ApplicationContext 管理的标准 Spring bean!
关于 Spring 核心配置注解的简要介绍到此为止。如果您有兴趣了解更多关于 Spring 2.5 的新功能以及它们如何协同工作,我邀请您参加本周三的Spring 2.5 网络研讨会,我将在其中涵盖 Spring 2.5 的所有关键功能领域,从 Java 6 支持到基于注解的配置!