一、AOP的术语:
aop 有一堆术语,非常难以理解,简单说一下
-
通知(有的地方叫增强)(Advice)
需要完成的工作叫做通知,就是你写的业务逻辑中需要比如事务、日志等先定义好,然后需要的地方再去用
-
连接点(Join point)
就是spring中允许使用通知的地方,基本上每个方法前后抛异常时都可以是连接点
-
切点(Poincut)
其实就是筛选出的连接点,一个类中的所有方法都是连接点,但又不全需要,会筛选出某些作为连接点做为切点。如果说通知定义了切面的动作或者执行时机的话,切点则定义了执行的地点
-
切面(Aspect)
其实就是通知和切点的结合,通知和切点共同定义了切面的全部内容,它是干什么的,什么时候在哪执行
-
引入(Introduction)
在不改变一个现有类代码的情况下,为该类添加属性和方法,可以在无需修改现有类的前提下,让它们具有新的行为和状态。其实就是把切面(也就是新方法属性:通知定义的)用到目标类中去
-
目标(target)
被通知的对象。也就是需要加入额外代码的对象,也就是真正的业务逻辑被组织织入切面。
-
织入(Weaving)
把切面加入程序代码的过程。切面在指定的连接点被织入到目标对象中,在目标对象的生命周期里有多个点可以进行织入:
- 编译期:切面在目标类编译时被织入,这种方式需要特殊的编译器
- 类加载期:切面在目标类加载到JVM时被织入,这种方式需要特殊的类加载器,它可以在目标类被引入应用之前增强该目标类的字节码
- 运行期:切面在应用运行的某个时刻被织入,一般情况下,在织入切面时,AOP容器会为目标对象动态创建一个代理对象,Spring AOP就是以这种方式织入切面的。
作者:来醉一场
链接:https://www.jianshu.com/p/4d22ea402d14
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参见:https://www.jianshu.com/p/22cf46235d75
https://blog.51cto.com/dba10g/1786117
https://blog.csdn.net/wyl6019/article/details/80136000
https://segmentfault.com/a/1190000015018888?utm_source=tag-newest
https://www.pianshen.com/article/1738306748/
结合案例理解:
https://baijiahao.baidu.com/s?id=1613310315603029991&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1651110900506017940&wfr=spider&for=pc 好概念解释
https://www.cnblogs.com/shoshana-kong/p/9042102.html
https://www.cnblogs.com/qf123/p/8671479.html 有详细的jvm原理在底层的使用
https://blog.csdn.net/hello_worldee/article/details/78136616 有详细的aop源码阅读
https://blog.csdn.net/sinat_28690417/article/details/103519034