领先一步
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 类!这是一个重要的设计目标:Spring 2.5 可以作为标准 JSF 1.2 托管 bean 功能的直接替代,只需选择 **SpringBeanFacesELResolver** 作为您的自定义 JSF ELResolver 即可。
从配置方面来说,要启用上述所有注解,您只需在 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 时才可用。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 代理中,基于注解的事务仅限于通过代理传入的公共方法调用。
如果您的环境能够进行加载时编织,则以下配置足以启用 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 导出。默认的 MBeanServer 将在所有常用平台上自动检测,包括标准 Java 5 平台 MBeanServer 以及 WebLogic 9/10 和 WebSphere 6 公开的特殊 MBeanServer。
<context:mbean-export/>
Spring 托管的 bean 然后可以实现标准 MBean/MXBean 约定,根据 JMX 规范作为 MBean 类进行限定,或者使用以下注解声明其管理签名(自 Spring 1.2 起已知)
这表明了 Spring 注解配置模型的真正强大之处:不同的配置关注点无缝地融合成一个统一的整体,具有一致的配置风格和统一的组件生命周期——它仍然是一个标准的 Spring bean,由 Spring ApplicationContext 管理!
关于 Spring 核心配置注解的简要介绍就到这里。如果您有兴趣了解更多关于 Spring 2.5 中的新功能以及它们如何结合在一起的信息,我邀请您参加本周三的 Spring 2.5 网络研讨会,我将在其中涵盖 Spring 2.5 的所有关键功能领域,从 Java 6 支持到基于注解的配置!