`

Spring 2.0 AOP 与事务配置突破

阅读更多
Spring 2.0  的重头戏之一就是AspectJ 式 AOP 配置。 但是一定要通过对比,才能看到2.0式的AOP配置是如何跳出一片新天空的。

一. 对比

先看1.0的标准事务配置:

<bean id="baseTxService"
	class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
	abstract="true">
	<property name="transactionManager" ref="transactionManager" />
	<property name="proxyTargetClass" value="true" />
	<property name="transactionAttributes">
		<props>
			<prop key="get*">PROPAGATION_REQUIRED,readOnly
			</prop>
			<prop key="find*">PROPAGATION_REQUIRED,readOnly
			</prop>
			<prop key="save*">PROPAGATION_REQUIRED</prop>
			<prop key="remove*">PROPAGATION_REQUIRED</prop>
		</props>
	</property>
	<property name="preInterceptors">
		<list>
			<ref bean="methodSecurityInterceptor" />
		</list>
	</property>
</bean>
<bean id="bookManager" parent="baseTxService">
	<property name="target">
		<bean class="org.springside.bookstore.admin.manager.BookManager" />
	</property>
</bean>


再看2.0的新配置:

<aop:config proxy-target-class="true">
	<aop:advisor pointcut="execution(* *..*Manager.*(..))" advice-ref="txAdvice" />
	<aop:advisor pointcut="execution(* *..*Manager.save(..))" advice-ref="fooAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="save*" />
		<tx:method name="remove*" />
		<tx:method name="*" read-only="true" />
	</tx:attributes>
</tx:advice>
<bean id="bookManager" class="org.springside.bookstore.commons.service.BookManager" />


二.进步

1. AOP的配置方式也AOP了。
      对比1.0的配置文件,因为下面2提到的限制,事关安全acegi methodSecurityInterceptor 拦截器要配置在关于事务的TransactionProxyFactoryBean的preInterceptors属性里,这样子就一点不AOP了。

      而2.0使用ponintcut expression,很AOP的配置一切Aspect。

2. 1.0时,一个已经AOP过的object不能再次被AOP。
   在Spring 1.0的文档里Rod说,比如<bean id="bookManager" parent="baseTxService">已经进行了一次AOP,如果想在这个Bean上再配一层AOP,比如要对方法执行结果缓存,无论以 1.0 还是2.0的方式定义,cglib方式是会报错的,而基于接口的方式,结果不确定。

3. BookManager能直接定义自己,而不是像1.0那样作匿名内部target。

三. 语法

Spring参考文档 7.3 chema-based AOP support 提供了aspect,advisor,advide三种组装方法的解释,其中aspect是aspectJ原装,但稍复杂,

这里唯一有点难懂的是pointcut里的语法,其实也很好学,Spring参考文档7.2.3.4里有完整说明 ,其实一排子过去是

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
其中带问号的modifiers-pattern?(public/protected) 和 declaring-type-pattern? throws-pattern? 可以不填

可见execution(* *..BookManager.save(..))

第一颗* 代表ret-type-pattern 返回值可任意,
*..BookManager 代表任意Pacakge里的BookManager类。
如果写成com.xyz.service.* 则代表com.xyz.service下的任意类
com.xyz.service..* com.xyz.service则代表com.xyz.service及其子package下的任意类
save代表save方法,也可以写save* 代表saveBook()等方法
(..) 匹配0个参数或者多个参数的,任意类型
(x,..) 第一个参数的类型必须是X
(x,,,s,..) 匹配至少4个参数,第一个参数必须是x类型,第二个和第三个参数可以任意,第四个必须是s类型。
分享到:
评论

相关推荐

    Spring2.0 事务处理

    在IT行业中,Spring框架是...Spring 2.0引入了基于AOP(面向切面编程)的声明式事务管理,使得事务配置更加直观。 在`applicationContext.xml`配置文件中,我们可以设置事务管理器和声明事务的行为。例如: ```xml ...

    spring2.0声明式事务

    ### Spring 2.0 声明式事务配置详解 #### 一、Spring 2.0 声明式事务概述 随着 Spring 框架的发展,从 Spring 1.x 到 Spring 2.0 版本,声明式事务管理方式有了显著改进。在 Spring 1.x 中,主要通过 AOP 方式实现...

    SPRING2.0中文文档

    Spring 2.0强化了与Java EE规范的集成,包括JTA事务管理、EJB3集成以及对JavaServer Faces的支持,使得开发者可以在不牺牲Spring优点的前提下,充分利用Java EE的功能。 总结,这份中文版的Spring 2.0技术文档全面...

    spring2.0中文手册及使用指南 chm

    Spring 2.0 是一个非常重要的Java框架,它在企业级应用开发中占据了核心地位,尤其是在基于Java的轻量级应用程序上下文(IoC)和面向切面编程(AOP)方面。本手册和使用指南提供了全面的Spring 2.0相关知识,包括其...

    Spring2.0宝典源代码

    《Spring2.0宝典源代码》是一份珍贵的学习资源,由知名作者李刚编写,旨在深入解析Spring框架的2.0版本。这份源代码集合是配合书籍《Spring2.0宝典》使用的,读者可以通过实际操作代码来理解和掌握Spring 2.0的核心...

    Spring2.0的配置

    本文将详细介绍Spring 2.0的声明式事务配置以及如何简化这一过程。 首先,Spring提供了多种事务管理器,以适应不同的持久层技术和环境。对于单一资源,可以选择如DataSourceTransactionManager(适用于JDBC)、...

    Spring2.0中文教程

    Spring 2.0是Spring框架的一个重要版本,它在Java企业级应用开发中扮演着核心角色。本教程将深入探讨...文档`spring2.0-reference_final_zh_cn.chm`将详细阐述这些概念和技术,帮助你成为一名熟练的Spring开发者。

    详尽的Spring2.0学习提纲

    Spring 2.0是Java开发中的一个里程碑,它在企业级应用开发中扮演着至关重要的角色,特别是对于依赖注入(IoC)和面向切面编程(AOP)的支持。本学习提纲旨在为初学者提供一份详尽的Spring 2.0学习指南,帮助他们系统...

    spring2.0 jar包

    Spring 2.0加强了AOP支持,允许开发者定义和执行横切关注点,如日志记录、事务管理等。@Aspect注解用于定义切面,@Before、@After、@Around等用于指定通知类型。此外,Spring还支持自定义注解作为切入点表达式,提高...

    SPRING2.0开发详解

    ### SPRING2.0开发详解 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用程序和服务。它最初由Rod Johnson在2004年创建,并随着时间的发展不断壮大和完善。Spring 2.0版本是Spring...

    spring2.0 中文教程

    2. **AOP(面向切面编程)**:Spring 2.0提供了更强大的面向切面编程支持,使得开发者可以将关注点分离,如日志、事务管理等,从而降低代码复杂性。AOP代理包括JDK动态代理和CGLIB代理,允许开发者定义切入点和通知...

    廖雪峰 Spring 2.0 核心技术与最佳实践 高清扫描版

    《Spring 2.0 核心技术与最佳实践》是由知名IT教育家廖雪峰编写的教程,旨在为从初学者到高级工程师提供全面而深入的Spring 2.0框架理解与应用指导。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛使用...

    spring2.0技术手册_源代码(全十章)

    同时,还可以了解基于XML的事务配置和基于注解的事务配置的区别。 第四,Spring 2.0在数据访问层也有所提升,如JDBC抽象层的增强,使得数据库操作更加简洁和安全。源码中会展示如何使用`JdbcTemplate`和`...

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    Spring 2.0引入了基于注解的AOP配置,极大地简化了AOP的使用。这篇博客文章将探讨如何在Spring 2.0中使用AOP实例,特别是通过注解来实现。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了...

    Spring 2.0 源代码

    2. **AOP(面向切面编程)**:Spring 2.0提供了更强大的面向切面编程支持,允许开发者定义切面、通知(advisors)和切点(pointcuts),并将其应用于业务代码,实现如日志、事务管理等功能。切面可以是接口、类或...

    spring2.0 核心jar包

    2. **AOP(面向切面编程)**:Spring2.0引入了全面的AOP支持,允许开发者定义和执行横切关注点,如日志、事务管理等,从而实现代码的模块化,提高代码的复用性和可维护性。 3. **IoC容器增强**:在Spring2.0中,IoC...

    spring 2.0使用AOP实例(基于XML的配置方式)

    AOP是Spring框架的一个重要特性,它允许我们编写与业务逻辑无关的代码,如日志、事务管理、性能监控等,并在适当的时候自动插入到程序执行流程中。 首先,AOP的核心概念包括切面(Aspect)、连接点(Join Point)、...

    spring2.0学习源码

    这个压缩包包含了Spring 2.0版本的源代码,为程序员提供了宝贵的探索与学习平台。Spring作为Java领域的主流框架,其2.0版本是一个重要的里程碑,引入了许多创新特性,提升了框架的灵活性和可扩展性。 在Spring 2.0...

Global site tag (gtag.js) - Google Analytics