spring aop实现原理

一、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

https://blog.csdn.net/jeffleo/article/details/61208404

原文地址:https://www.cnblogs.com/chaojibaidu/p/12634684.html