spring ioc aop 动态代理之间的关系

2021-11-02  本文已影响0人  达微

1、类加载器加载class文件

2、加载到jvm 中,obtainFreshBeanFactory()里的refreshBeanFactory()来为每个bean生成 一个BeanDefinition ,

  注意此时不是我们想要的对象,只是bean的信息,依赖关系等,后续后面spring解析器去解析一个BeanDefinition。

3、BeanDefinition信息注册,

  将抽象好的BeanDefinition统一注册到IoC容器中,IoC容器是通过hashMap来维护BeanDefinition信息的,key为beanName,value为BeanDefinition。

4、createBeanInstance()根据beanDefinition的信息创建bean的实例

    怎么创建呢?主要有两种方法,一种是通过beanUtil反射,另一种 CGLIB来实例化对象,如果Bean定义中有方法覆盖,则就需要CGLIB父

。。。

7、至于aop特性是实例化好了之后,后置处理来处理

    如果我们spring配置了AOP的话,这个时候就要考虑是cglib还是jdk 动态代理去实现这个功能

1、在默认情况下,如果spring bean有接口就使用jdk的动态代理。Proxy.newProxyInstance。如果没有接口就调用cglib通过操作字节码去生成目标类的子类来完成代理。

2、可以手动配置,强制都使用cglib,如果xml中配置 proxy-target-class=true 或则在注解上配置

@EnableAspectJAutoProxy(proxyTargetClass=true) 这个时候就全部使用cglib来完成动态代理

记得aop特性是初始化的时候完成的

4、如果需要类,spring 可以通过注解 或则代码去 map中 获取bean 。

5、ioc容器负责创建,管理,装配对象,以及管理对象的生命周期

上一篇下一篇

猜你喜欢

热点阅读