方式三:注解实现
package com.faq.diy;
//方法三:使用注解方式实现AOP
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect//标注这个类是一个切面
public class AnnotationPointCut {
@Before("execution(* com.faq.service.UserServiceImpl.*(..))")
public void before(){
System.out.println("==方法执行前==");
}
@After("execution(* com.faq.service.UserServiceImpl.*(..))")
public void after(){
System.out.println("==方法执行后==");
}
//在环绕环境中,我们可以给定一个参数,代表我们要获取处理切入点
@Around("execution(* com.faq.service.UserServiceImpl.*(..))")
public void around(ProceedingJoinPoint jp) throws Throwable{
System.out.println("环绕前");
Signature signature = jp.getSignature();
System.out.println("signature:"+signature);
//执行方法
Object proceed = jp.proceed();
System.out.println("环绕后");
System.out.println(proceed);
}
}
<!--方式三-->
<bean id="annotationPointCut" class="com.faq.diy.AnnotationPointCut"/>
<!--开启注解支持 JDK(默认 proxy-target-class="false") cglib(proxy-target-class="true")-->
<aop:aspectj-autoproxy/>