- Sping中不只是IOC有注解,而AOP通知同样可以使用注解来实现,注解的实现可以更加快速便捷实现通知功能,所以为了更加快速地实现功能,使用注解也是应该要掌握的。然后jar与笔记三中的一样。
- 除了注解通知之外,还有一个比较实用的实现通知的方式,那就是schema形式的通知。
注解通知
基本实现的思路:
配置注解AOP的思路:
- 编写一个类使用注解使其变成相应的通知;
- 然后在IOC容器中开启对于AOP注解的支持,将该通知纳入到容器当中(1.同样使用注解然后使用扫描包;2.直接在容器中使用< bean>< /bean>进行手动纳入);
- 然后在测试文件中调用链接了通知的方法进行检验。
从普通类到注解通知
- 编写类加上注解变成通知
logAspectAnnotation.java
package org.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import java.util.Arrays;
/**@Aspect声明此类是一个通知
*<bean id ="logAnnotation" class="org.aop.logAspectAnnotation"></bean>
* 将logAnnotation纳入SpringIOC容器中去,
* 记得1.配扫描器用mvc:和2.开启AOP注解支持
* JoinPoint p参数是在需要获取操作目标对象时编写,不需要时可省略
*
* */
@Component("logAnnotation")
@Aspect
public class logAspectAnnotation {
@Before("execution(public * addStudent(..))")//属性:定义切入点
public void myBefore(JoinPoint p){
System.out.println("【注解形式下】-【前置通知】");
}
@AfterReturning(pointcut = "execution(public * addStudent(..))" ,returning ="returningValue")
public void myAfter(JoinPoint p,Object returningValue){
System.out.println("【注解形式下】-【后置通知】,对象名:"+p.getTarget().getClass().getName()
+",方法名:"+p.getSignature().getName()+",参数列表:"+ Arrays.toString(p.getArgs())+",返回值:"+ returningValue);
}
}
其中JoinPoint p参数是在需要获取操作目标对象时编写,不需要时可省略而使用时记得导包,而后置通知在不需要求得返回值时,注解可以和前置通知的编写一样:
@AfterReturning(“execution(public * addStudent(…))”)
但在需要返回值时,必须要分pointcut和returning,在参数列表上添加上返回值参数,才可以调用到返回值,不然会出现报错。
2.添加aopAnnotation.java
package org.eaxm;
import org.springframework.stereotype.Component;
//此类用于测试Aop注解
@Component("aopAnnotation")
public class aopAnnotation {
public void