1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.创建切面类
2.1 @Aspect注解为切面类 并交由容器管理
2.2 @Pointcut切点表达式
pointcut : 切入点表达式
以execution()包裹起来的
1.单个方法
表达式:execution(方法访问修饰符 返回值类型 方法所在包名.类名.方法名(参数类型))
例如:execution(public void com.spring.dao.UserDaoImpl.insertUser())
2.统配部分方法
第一个*表示不限制方法访问修饰符,返回值类型
类后的*表示不限制方法的名称
(..)表示不限制参数的个数和类型
例如:execution(* com.spring.dao.UserDaoImpl.*(..))
3.统配所有方法
例如:execution(* *.*.*(..))
pointcut-ref : 切入点表达式的名称
returning : 接收目标方法的返回值的通知方法中参数名称
throwing : 接收目标方法抛出异常对象的通知方法中参数名称
2.3 配置通知
<aop:before>前置通知
<aop:after>后置通知
<aop:after-returning>返回通知
<aop:after-throwing>异常通知
<aop:around>环绕通知
注解版
@Before()
@After("point()")
@AfterThrowing(value = "切点表达式point()",throwing="e")
@AfterReturning(value = "point()",returning = "res")
@Around()
@EnableAspectJAutoProxy在springboot中不加也能运行
注意:
1.JoinPoint参数放第一位
2.异常和返回声明要与形参对应
3.测试时不要自己创建对象