使用注解方式实现AOP的操作的步骤
下面我们将上篇博客中的案列修改成使用注解进行AOP操作的方式
1.修改applicationAop.xml Spring配置文件:
<?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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--开启自动代理-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!--配置进行创建对象-->
<bean id="student" class="com.merpyzf.study03.Student"></bean>
<bean id="studentPower" class="com.merpyzf.study03.StudentPower"></bean>
</beans>
当使用注解的时候,只需要再配置文件中开启 AOP的自动代理,并创建所需的对象就可以,不必再进行切入点,切面等繁琐的配置。
2 在增强类中添加注解完成AOP操作
StudentPower.java
/**
* Created by 春水碧于天 on 2017/6/25.
*/
//增强类
//使用Aspect注解标记增强类
@Aspect
public class StudentPower {
@Before(value = "execution(* com.merpyzf.study03.Student.readBook(..))")
public void buyBook() {
System.out.println("我买了一本书 ==> <aop:before>");
}
@After(value = "execution(* com.merpyzf.study03.Student.readBook(..))")
public void sellBook() {
System.out.println("我要把书卖掉! ==> <aop:after>");
}
@Around(value = "execution(* com.merpyzf.study03.Student.readBook(..))")
public void around(ProceedingJoinPoint proceedingJoinPoint) {
System.out.println("开始读书 ==> <aop:around>");
try {
//调用要增强的方法
proceedingJoinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
System.out.println("书读完了==> <aop:around>");
}
@AfterThrowing(value = "execution(* com.merpyzf.study03.Student.readBook(..))")
public void exp() {
System.out.println("切入点抛出异常了 <aop:after-throwing>");
}
@AfterReturning(value = "execution(* com.merpyzf.study03.Student.readBook(..))")
public void afterReturning() {
System.out.println("切入点正常执行没有出现异常 ==> <aop:after-returning>");
}
}
测试代码和上篇博客中完全相同此处省略,Student类(被增强类)也没有做任何改动,此处省略。
下面来看一下运行效果: