AOP实现(3) 使用注解实现AOP
* 开启注解支持: <aop:aspectj-autoproxy proxy-target-class="false"/>
- aspectj-autoproxy 属性开启注解支持
- proxy-target-class="false" 代表关闭CGLIB动态代理 使用自带JDK动态代理;
- proxy-target-class="true" 代表使用CGLIB动态代理
* AOP中使用的注解
@Aspect 将一个类标记为切入类,标注一个类是一个切面类
@PointCut:公共切入点表达式
@EnableAspectJAutoProxy : 开启基于注解的AOP模式
- 前置通知(@Before)
- 后置通知(@After)
- 返回通知 (@AfterReturning)
- 异常通知 (@AfterThrowing)
- 环绕通知 (@Around)
- ProceedingJoinPoint joinPoint: 作为方法的参数传入切面方法,可以得到目标方法的相关信息
- 代码
/**
* 使用注解实现AOP
* @Aspect 将一个类标记为切入类,标注一个类是一个切面
*/
@Aspect
public class AnnotationPointCut {
@Before("execution(* com.shi.service.UserServiceImpl.*(..))") // 添加切入点
public void before(){
System.out.println("=================切入方法执行前===================");
}
@After("execution(* com.shi.service.UserServiceImpl.*(..))")
public void after(){
System.out.println("=================切入方法执行后===================");
}
@Around("execution(* com.shi.service.UserServiceImpl.*(..))")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("================环绕前============");
//打印签名
System.out.println(joinPoint.getSignature());
//执行方法
Object process = joinPoint.proceed();
System.out.println("================环绕后============");
System.out.println(process);
}