BeanFactoty实现

一、实现示例

1. 1 Bean定义后处理器

在例子中,我们创建一个Config类型的对象。
在这里插入图片描述
BeanDefinintionBuilder创建一个类型为Config,且单例模式的Bean对象定义。
使用该定义创建一个名为 "config"的bean对象并注册到bean容器中。
在这里插入图片描述
打印名为config的Bean对象,发现config对象中并没有包含bean1对象和bean2对象。
在这里插入图片描述
registerAnnotationConfigProcessor对BeanFactory进行了拓展,由打印结果可知,ConfigurationAnnotataionProcessor(@Configuration注解处理器)被加到了Bean容器中,此外,
还有处理@Autowired注解的AutowiredAnnotationProcessor,处理@Resource注解的CommonAnnotationProcessor。
在这里插入图片描述
执行postProcessBeanFactory方法来进行后处理以解析bean对象,在下图可以发现经过了后处理器的处理后bean1和bean2对象也被放到了容器中。

在这里插入图片描述
由以上例子可知,BeanFactory的功能是存在不足的,需要依赖后bean定义处理器进行补充bean定义。

1.2 Bean后处理器

  • 从Bean容器中获取bean1和bean2对象,可以发现成功获取了bean1对象,但没有获取bean2对象。

在这里插入图片描述

  • bean2并没有被注入到容器中。

在这里插入图片描述

  • 给BeanFactory添加Bean后处理器后,打印的bean对象包含了bean1和bean2。
    添加后处理器时并不会实例化Bean对象,而是等到getBean方法被调用后才会实例化bean对象。

在这里插入图片描述

  • 如果想要在getBean方法被调用之前就实例化单例对象,可以执行方法PreInstantiateSingletons

在这里插入图片描述

总结

beanFactory不会做的事情
(1)不会主动调用BeanFactory后处理器
(2)不会主动添加Bean后处理器
(3)不会 主动初始化单例
(4)不会解析BeanFactory,不会解析${}与#{}

而ApplicationContext将以上4件事都做好了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值