理解spring中,使用工厂Bean生成代理以及使用aop生成代理的底层原理

这里所提到原理均是个人在学习spring的过程中,自己对于spring动态代理的理解,如果有不对的地方还请原谅,恳请大佬指出来,共同进步!

基于XML的动态代理(个人感觉基于注解的动态代理底层原理也是一样的):

1、工厂Bean生成代理(也叫作半自动动态代理)的底层原理:我们知道spring给我们提供了很多已经写好了的类,这些类都是一些用来生产具有特定功能的bean。其里面至少有两个成员属性:1.存放待增强的目标类属性,2.需要增强的内容类(这里可以是一个事物模板,如:TransactionTemplate,也可以是一个简单的类)。我们在配置文件中给指定的工厂Bean进行配置(包括属性的注入)。工厂bean拿到目标类以及通知(增强)后,利用动态代理完成目标的增强并返回增强以后的对象。

2、AOP生成动态代理(也叫全自动动态代理)的底层原理:当spring加载完配置文件后,配置文件上的信息已经全部被spring所知道,当我们通过IOC容器得到目标类的时候,spring会判断配置文件上面的信息有没有aop配置,如果有,那么会继续判断我们所要得到的目标类是否在aop配置的切入点(这里使用切入点表达式)路径中,如果在,那么将对这个目标类进行增强后,生成一个代理对象,然后返回给我们。其中aop增强的原理是利用了后处理bean,通过后处理bean(BeanPostProcessor)的两个方法(before,after,未全部写完整!),在这两个方法之内完成动态代理,其所需要的参数有:目标类(IOC中,spring通过我们调用getBean方法拿Bean时,得知我们所要的bean),以及所要增强的通知。所以我们在使用aop完成动态代理编程的时候,需要给aop指出需要增强的通知,以及需要被增强的切入点有哪些,从而判断我们所要从IOC容器中拿出来的bean是否需要进行指定的增强。

    原文作者:AOP
    原文地址: https://blog.csdn.net/qq_41300571/article/details/80174150
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞