使用 annotation 配置 AOP :
使用 Java1.5 或以上版本,我们可以使用 annotation 设置 AOP 。这样我们不再需要往 beans.xml 里面编写 aop:config 之类的配置代码。
需要在 beans.xml 文件里面增加这一句:
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- 使 bean 可以使用 annotation -->
<aop:aspectj-autoproxy />
<!--
<aop:config>
<aop:aspect id="aspectDemo" ref="aspectBean">
<aop:pointcut id="somePointcut"
expression="execution(* annoaop.Component.business*(..))" />
<aop:before pointcut-ref="somePointcut"
method="validateUser" />
<aop:before pointcut-ref="somePointcut"
method="beginTransaction" />
<aop:after-returning pointcut-ref="somePointcut"
method="endTransaction" />
<aop:after-returning pointcut-ref="somePointcut"
method="writeLogInfo" />
</aop:aspect>
</aop:config>
-->
<bean id="aspectBean"
class="annoaop.AspectBean">
</bean>
<bean id="component"
class="annoaop.ComponentImpl">
</bean>
</beans>
之后我们就往我们的切面类 AspectBean 添加 annotation :
@Aspect
public class AspectBean {
// 定义切入点,切入点表达式为 Component 接口的以 business 开头的所有方法,参数使用 .. 表示所有参数
@Pointcut("execution(* annoaop.Component.business*(..))")
public void somePointcut(){
}
@Around("somePointcut()")
public void processBusiness(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println(" 执行用户验证 !");
System.out.println(" 开始事务 ");
joinPoint.proceed();
System.out.println(" 结束事务 ");
System.out.println(" 书写日志信息 ");
}
}
注意红色部分:
首先使用 @Aspect 给这个类声明为一个切面。
之后使用 @Pointcut 给 target 声明一个切入点。
然后使用 @Around 声明环绕增强 processBusiness 。参数只有一个,就是 ProceedingJoinPoint ,这个参数就代表 somePointcut 这个方法,调用 proceed() 方法则执行切入点方法。在这个环绕增强里面,我们可以轻松地按照自己的思路配置切入点执行前或者执行后需要增加的操作。
运行主方法:
执行用户验证 !
开始事务
bussiness
结束事务
书写日志信息