学习AOP,关键在于理解AOP的思想,能够使用AOP。对于AOP众多的概念,需要理解3个重要的概念是Pointcut、Advice和Advisor。
切入点(Pointcut)
在介绍Pointcut前,有必要先介绍一下Join Point(连接点)的概念。Join Point指的是程序运行中的某个阶段点,如某个方法调用、异常抛出等。Pointcut是Join Point的集合,它是程序中需要注入Advice的位置的集合,指明Advice要在什么样的条件下才能被触发。
org.springframework.aop.Pointcut 接口用来指定通知到特定的类和方法,在接口Pointcut中,主要包含两个接口:ClassFilter和MethodMatcher。
说明:
接口ClassFilter,用来将切入点限定在给定的目标类中。
接口MethodMatcher,用来判断切入点是否匹配目标类给定的方法。
通知(Advice)
Advice是某个连接点所采用的处理逻辑,也就是向连接点注入的代码。
Advisor
Advisor是Pointcut和Advice的配置器,它包括Pointcut和Advice,是将Advice注入程序中Pointcut位置的代码。
上面只是粗略地对AOP的3个概念进行一下说明,目的是让读者能够较快地进入到AOP中。
先来看看这个spring的配置文件的配置:
点击(此处)折叠或打开
- <!-- 事务管理器 -->
- <bean id="transactionManager"
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory" />
- </bean>
-
- <!-- 配置事务的传播特性 -->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <tx:method name="get*" propagation="REQUIRED" read-only="true" />
- <tx:method name="del*" propagation="REQUIRED" />
- <tx:method name="save*" propagation="REQUIRED" />
- <tx:method name="update*" propagation="REQUIRED" />
- </tx:attributes>
- </tx:advice>
-
- <!-- 配置事务拦截器拦截哪些类的哪些方法,一般设置成拦截Service -->
- <aop:config>
- <aop:pointcut expression="execution(* com.buty.service.*.*(..))"
- id="allDaoMethod" />
- <aop:advisor advice-ref="txAdvice" pointcut-ref="allDaoMethod" />
- </aop:config>
表示com.buty.service包下的所有方法为为事务管理。
execution(* com.buty.shtel.account.dao.impl.*.*(..))
这样写就可以了,这是com.buty.shtel.account.dao.impl 包下所有类的所有方法。
第一个 * 代表所有的返回值类型;
第二个 * 代表所有的类;
第三个 * 代表类所有方法,最后一个 .. 代表方法的所有参数。
下面给出一些常见切入点表达式的例子:
-
任意公共方法的执行:
execution(public * *(..))
-
任何一个以“set”开始的方法的执行:
execution(* set*(..))
-
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
-
定义在service包里的任意方法的执行:
execution(* com.xyz.service.*.*(..))
-
定义在service包或者子包里的任意类的任意方法的执行:
execution(* com.xyz.service..*.*(..))
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9399028/viewspace-1823332/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9399028/viewspace-1823332/