Spring的AOP:
AOP就是一种更高级的动态代理的使用; Aspect Oritention Programming(面向切面编程)
切入点:要加入业务逻辑的点(在哪些类的哪些方法上面)
通知:通知包含两个方面,1,代表方法的执行时间,2,在这个时间上面要做什么事情;
切面:一个切入点+一个通知=一个切面(在什么地方,在什么时候,做什么事情);
织入:把一个切面应用到真实对象上面的过程,就叫做织入;
SpringAOP的执行流程:
1,解析xml;
2,实例化所有的bean;
3,解析aop:config;
1,解析aop:aspect,得到aspect引用的对象;txManager
2,解析aop:aspect里面的每一个切面;
1,得到该aspect对应的pointcut-ref;
2,得到pointcut-ref对应的pointcut的表达式;
3,使用表达式中用于匹配类型的表达式;
4,使用该表达式去和spring里面配置的所有的bean的类型进行匹配;
1,如果匹配不上,不管;
2,如果匹配上了,该对象作为spring动态代理的目标对象;
1,如果该对象实现了接口,使用JDK的动态代理包装;
2,如果该对象没有实现接口,使用cglib包装;
3,得到配置的拦截时机+逻辑提供类(txManager)的对应方法(从method解析)+pointcut表达式中方法的匹配模式创建一个拦截器
4,在把该拦截器使用对应的动态代理机制代理成代理对象;
5,替换spring容器中的对应bean的实例;
Spring中AOP的通知类型:
aop:before:前置通知;
aop:after-returning:后置通知;
aop:after:最终通知;
aop:after-throwing:异常通知;
aop:around:环绕通知;
关于环绕通知的使用:
切入点的表达式:AspectJ:
AOP的注解式开发
注意:在配置文件中一定要指明:<aop:aspectJ-autoproxy/>
这个标签相当于指明了第三方解析程序
参考:
https://blog.csdn.net/ming13849012515/article/details/86022143