目录
1 AOP:面向切面编程
1.1 前置知识
学习AOP前,要知道几个概念
连接点:类里面哪些方法可以被增强
切入点:实际上真正被增强的方法
通知(增强):
①实际增强的逻辑部分称为通知(增强)
②通知有许多类型
前置通知,后置通知(返回通知),环绕通知,异常通知,最终通知
切面:是动作,用于把通知应用到切入点
准备工作:
引入依赖
spring配置文件中开启组件扫描(很多地方都要开启的)
spring配置文件中加上<aop:aspectj-autoproxy /> 注解,开启AspectJ自动代理,为目标对象自动生成代理
1.2 AOP操作的几个关键点
创建切面类
在类上面添加两个注解 @Aspect @Component
在里面的切入点方法上面加上通知类型的注解
@Before:前置通知,在被代理的目标前执行
@After:最终通知,在被代理的目标方法最终结束后执行
@AfterReturning:后置通知(返回通知),在被代理的目标方法成功结束后执行
@AfterThrowing:异常通知,在被代理的方法异常结束后执行
@Around:环绕通知,被代理的方法前后都执行
执行顺序:前置通知,目标操作,返回通知或者异常通知,最终通知
以上所有注解里面都要加上切入点表达式
1.3 切入点表达式
1.3.1 切入点表达式语法
execution([权限修饰符] [返回类型] [类全路径] [方法名称] ([参数列表]) )
举例 1:对 com.atguigu.dao.BookDao 类里面的 add 进行增强
@After("execution(* com.atguigu.dao.BookDao.add(..))")
举例 2:对 com.atguigu.dao.BookDao 类里面的所有的方法进行增强
@Before("execution(* com.atguigu.dao.BookDao.* (..))")
1.3.2 重用切入点表达式
声明:
@Pointcut("execution(* com.atguigu