aop认识综合

阅读更多

 

aop是日志,事物的本质,用动态代理作为原理,注解相当于切点(切入表达式)---即凡是实现定点触发的系列操作都需要此原理(切面是根本)(技术原理:动态代理)---可以理解为用注解的地方都是用aop即都是动态代理原理

切面  织入  目标对象  生成代理对象---有接口的自动用jdk,没有接口的类是cglib(可以指定cglib)

切面:切点,增强

切点:接入点的表达式(切面根据切点表达式即可获取目标方法)

增强:需要执行的加强动作

 

切面有顺序,可以在编译时织入,也可运行时织入,默认运行时织入

 

 

 

切面的顺序

order 越大的优先执行,即时order小的编译在前也会在增强是判断转化过去(@befor)

 

 

自定义的切面优先级不可和事物优先级同级(事物的优先级可以设置)

 

 

aop内部执行的顺序

 代理对象的加强方式形成拦截器链,依次执行---aop最终会按照顺序形成拦截器链

 

切面中目标方法的调用proceed也是用反射的机制调用,在运行时生成代理对象此时把方法名,参数信息放入父类成员变量。在将增强方法形成的拦截器链一起依次利用反射的机制执行。

 

 

代理对象的两大用处

     1,直接代理方法装饰了目标方法。

     2,代理对象的加强方式形成拦截器链,依次执行

 

参看:

https://blog.csdn.net/qq_32331073/article/details/80596084

 

https://blog.csdn.net/luojinbai/article/details/86728469

 

 

环绕通知和前置通知的区别

环绕通知=前置+目标方法执行+后置通知

环绕通知可以改变目标返回值类型(只要是object即可),前置后置不行(空返回)

 

重试次数的实现也是结合切面完成+Ordered接口的实现  实现Ordered 接口的访客可以设计请求次数

切面中接入该方法重试次数和Ordered 属性对比,超过了次数就抛异常

 

@Before  @After @Around 这些都可以单独和目标方法的构成拦截器链,更多的用法是 @Before  @After 空方法体 @Around 环绕前面两种通知

 

参看:

 

https://www.cnblogs.com/gmq-sh/p/6018587.html

 

 

 

 

 

你可能感兴趣的:(spring)