spring ioc aop 动态代理之间的关系
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容器负责创建,管理,装配对象,以及管理对象的生命周期