解析BeanFactory和ApplicationContext

直接从spring boot主启动类来看

SpringApplication的run方法返回的就是Bean容器,我们看到的返回的类是ConfigurableApplicationContext,使用idea的快捷键CTRL+ALT+U查看ConfigurableApplicationContext继承图,如下:

可以看出来ApplicationContext间接继承了BeanFactory,可以认为ApplicationContext对BeanFactory做了功能的扩展并且组合了它的功能。实际上BeanFactory才是核心容器。

BeanFactory功能

我们来看BeanFactory的接口

 发现功能很少,几乎只有getBean看的上眼。但是,其实控制反转,依赖注入,bean的生命周期等都是它的实现类提供的,我们看它的主要功能还要看它的具体实现

ApplicationContext的扩展

它的扩展主要体现在继承的以下四个接口上

 MessageSource:国际化能力

ResourcePatternResolver:通配符匹配资源的能力

ApplicationEventPublisher:发布事件对象

EnvironmentCapable:处理环境信息的能力,比如读取配置文件

BeanFactory的实现

最重要的实现是DefaultListableBeanFactory这个类。

BeanFactory不会主动调用bean工厂后置处理器,不会主动添加bean的后置处理器,不会主动初始化bean(开启后才可),不会解析`${}`和`#{}`。相对于ApplicationContext太底层了。

 ApplicationContext的实现

四个比较经典的实现

ClassPathXmlApplicationContext:从类路径下的xml文件加载配置bean。

FileSystemXmlApplicationContext:从磁盘路径下的xml文件加载配置bean。

AnnotationConfigApplicationContext:基于注解配置类配置加载bean

AnnotationConfigServletWebServerApplicationContext::基于注解配置类配置加载bean用于web环境。AnnotationConfigServletWebServerApplicationContext案例:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值