spring 知识积累

52 篇文章 0 订阅
41 篇文章 1 订阅

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这个方法;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值