spring 知识积累

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Java_Jsp_Ssh/article/details/82845840

1:BeanFactory  bf = XmlBeanFactory(new ClassPathResource(new Resource(“applicationContext.xml”)));

Sping 从xml到bean对象,总共经历以下阶段:定位,加载,注册,后置初始化(包含增强)

Spring 1:定位,resource实现类去查找xml文件,用XmlBeanDefinitionReader 读取xml,找到root根,完成xml对象到document对象的转换,然后在defaultListableBeanFaction解析,最后在BeanDefinitionRegistry类 中注册;其中BeanDefinitionRegistry就相当于sping内部存储数据库,将beanName ,及对应的beanDefinition以键值对的形式写进ConCurrentHashMap中;其中defaultListableBeanFaction是整个bean加载的整个核心部分,是spring加载与注册的默认实现;其中new成的beanDefinition为xml对象到GenericBeanDefinition,其实现了BeanDefinition接口,继承了AbstractBeanDefinition类,注册结束后完成了xml对象到GenericBeanDefinition的转变;

Spring 2:加载:FactoryBean    1:将GenericBeanDefinition 转换成RootBeanDefinition ;通过实现FactoryBean 接口实现bean的创建;先获取单例bean,createBean 方法,通过反射根据className newInstance方法生成bean对象;这里实例化的bean尽可能都调用注册的BeanPostProcessor 的postProcessAfterInitialization 方法处理,主要是记录初始化的bean,以防再次创建;AbstractAutowireCapableBeanFactory类;BeanPostProcess 接口里postProcessAfterInitialization方法对bean判断,如果此时有aop,则直接生成对应代理bean直接返回了;

// Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.

给BeanPostProcessors(后置处理器类)一个机会,返回一个代理来代替目标类;

// Given BeanPostProcessors a chance to return a proxy instead of the target bean  instance.

resolveBeforeInstantiation  这个方法里进行了代理的判断以及创建,主要是applyBeanPostProcessorsBeforeInstantiation这个方法;

猜你喜欢

转载自blog.csdn.net/Java_Jsp_Ssh/article/details/82845840