AOP使用前准备工作
1.首先在pom.xml中导入AOP的依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
定义一个切面类(切入点+通知)
1.类前注解:@Aspect @Component
*@Component 将该类注册为Spring的Bean交给IOC容器管理
*@Aspect 当Spring扫描到被@Aspect注解的类时(利用@ComponentScan扫描) 会被IOC容器识 别为一个切面(Aspect),通过动态代理自动生成一个动态代理类,将切面逻辑(需要增加的业务需求) 织入到目标方法中(需要被优化的方法 JoinPoint),运行时实际执行的是动态代理类中优化后的方 法
2.方法前注解 切入点:@Pointcut(execution)
通知类型:@Around、@Before、@After、@AfterReturing、@AfterThrowing
自定义注解:@annotation
*@Pointcut(execution) 用于封装切入点表达式 参数execution用于定义切入点,即规定需要被强化 的方法,*拦截方法返回值任意 .*.*任意的类与方法 (..)任意参数类型 * 类与方法层面 (..)方法参数 层面 利用该注解将切入点表达式封装到一个方法中,将该方法作为value给通知类型的参数赋 值,实现切入点表达式的复用


*@annotation(value:自定义注解的全类名) 将自定义注解的全类名作为参数写入到@annotation中 可以限定拦截被value注解的方法



*通知类型 例如@Before() 表示被标注的方法在目标方法(JoinPoint)前执行


3.JoinPoint(连接点) 携带通过切入点与自定义注解筛选出来的需要被强化的方法的信息 后续通过 反射取出原方法的信息并调用
*JoinPoint.getSignature() 返回当前连接点的签名对象(Signature接口)可以获取方法的基本信 息,方法名、参数类型、返回类型, 此处强转为 MethodSignature 用于获取方法的详细信息 此处 获取拦截到方法的操作类型(Update、Insert) 便于区分后续需要赋值的公共字段

*Object[] args = joinPoint.getArgs() 获取方法参数的实体对象 再通过反射获取该实体类的相关 set方法赋值即可


1686



被折叠的 条评论
为什么被折叠?



