高级Spring之BeanFactory 与 ApplicationContext 的区别

ApplicationContext接口

@SpringBootApplication
public class A01 {

    private static final Logger log = LoggerFactory.getLogger(A01.class);

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, IOException {

         //启动SpringBoot程序的方法      
      //这个方法返回的结果是Spring容器,两个参数(引导类的类型,main方法传递过来的命令行参数)
        ConfigurableApplicationContext context = SpringApplication.run(A01.class, args);

}

              通过SpringBoot的特定启动类,我们可以得到 ConfigurableApplicationContext,ApplicationContext的一个子接口,我们现在可以看这个ConfigurableApplicationContext子接口的内图:

       

           从这里我们可以知道:ApplicationContext实际上间接地继承了BeanFactory接口,对于BeanFactory而言,它提供了一些功能上的扩展,这些主要的功能扩展为ApplicationContext接口右侧的四个接口,每继承一个父接口,就意味着它又基本一项新能力,告诉我们:ApplicationContext的功能肯定要比BeanFactory的多

  • ApplicationContext 接口,是 BeanFactory 的子接口。它扩展了 BeanFactory 接口的功能,如:

    • 国际化

    • 通配符方式获取一组 Resource 资源

    • 整合 Environment 环境(能通过它获取各种来源的配置信息)

    • 事件发布与监听,实现组件之间的解耦

BeanFactory接口

        在Spring容器中, BeanFactory是spring里最顶层接口;包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean生命周期,维护bean之间的依赖关系

context.getBean("aaa))

       我们以常见的getBean()方法为例,实际上这个方法不是ApplicationContext提供的功能,而是间接地由BeanFactory来提供功能,如下图所示:

      ApplicationContext是怎么扩展的呢?它不是将所有的方法进行重写,而是内部组合了一个BeanFactory,你要调用 ApplicationContext的getBean(),它实际上内部是调用了BeanFactory的getBean(),功能是人家的getBean()提供的,从这里我们可以看出:BeanFactory要比 ApplicationContex更核心一些,主要的 ApplicationContext 实现都【组合】了它的功能,【组合】是指 ApplicationContext 的一个重要成员变量就是 BeanFactory

 从这里我们可以看到context容器对象里面有很多成员变量,beanFactory就是其中一个

总结:

        到底什么是 BeanFactory?

  • 它是 ApplicationContext 的父接口

  • 它才是 Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能,【组合】是指 ApplicationContext 的一个重要成员变量就是 BeanFactory

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值