本文主要是介绍Spring之AOP大体流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
AOP就是进行动态代理,在创建一个Bean的过程中,Spring在最后一步会去判断当前正在创建的这个Bean是不是需要进行AOP,如果需要则会进行动态代理。
如何判断当前Bean对象需不需要进行AOP:
1. 找出所有的切面Bean
2. 遍历切面中的每个方法,看是否写了@Before、@After等注解
3. 如果写了,则判断所对应的Pointcut是否和当前Bean对象的类是否匹配
4. 如果匹配则表示当前Bean对象有匹配的的Pointcut,表示需要进行AOP
利用cglib进行AOP的大致流程:
-
生成代理类UserServiceProxy,代理类继承UserService
-
代理类中重写了父类的方法,比如UserService中的test()方法
-
代理类中还会有一个target属性,该属性的值为被代理对象(也就是通过UserService类推断构造方法实例化出来的对象,进行了依赖注入、初始化等步骤的
对象) -
代理类中的test()方法被执行时的逻辑如下:
a. 执行切面逻辑(@Before) b. 调用target.test()
当我们从Spring容器得到UserService的Bean对象时,拿到的就是UserServiceProxy所生
成的对象,也就是代理对象。
UserService代理对象.xxx()>>>>执行切面逻辑>>>>target.xxx()
注意target对象不是代理对象,而是被代理对象。
这篇关于Spring之AOP大体流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!