Spring源码学习:容器和Bean(一)BeanFactory的初认识

我们先暂时把什么容器Bean放一边,单纯的去看SpringBoot启动,他到底启动了一个什么东西。

通过ApplicationContext找到BeanFactory

public static void main(String[] args) {
        SpringApplication.run(ZhangPengWebApplication.class, args);
    }

查看里面的执行的方法run到底返回一个什么对象?

    public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
        return run(new Class[]{primarySource}, args);
    }

返回的对象是一个ConfigurableApplicationContext的东西,来我们crtl+alt+U来看一下他的类图。
在这里插入图片描述
里面是有些老熟人的,我们先抓住一条线如下:
ConfigurableApplicationContext (继承)ApplicationContext (继承)XXXXBean Factory (继承) BeanFactory

继承很简单,我可以复用代码和扩展,相当于一代一代去丰富内容,甚至干脆多继承几个。

这时候,我们就要问BeanFactory是什么,用途是什么,他和后面几个“继承者”们的关系?

实际上spring代码还是比较讲究的,BeanFactory实际上可以说是Spring的核心容器。

BeanFactory在上面的图上就可以看出是ApplicationContext 的父类
Bean是Spring的核心容器,在于不管你是什么ApplicationContext都会有他的变量BeanFactory或者说是有getFBeanFactory的方法(当然会根据不同环境选择不同的BeanFactory)

这个是来自ApplicationContext获取BeanFactory
在这里插入图片描述

BeanFactory能干点啥?

看之前先通过ide的Structure来看一下BeanFactory的大体结构和里面的方法变量(实际ctrl+F12也是可以实现同样的效果),如下:
在这里插入图片描述

通过点击过去发现BeanFactory就是提供了一个getBean,帮助你获得bean而不是实际去创建而已。
实际上控制反转,基本的依赖注入,Bean的生命周期各种功能都是由他和他的实现类来完成的。

我们查看一下context和beanFantory,在springboot的具体都有啥:

public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        ConfigurableApplicationContext context = SpringApplication.run(DingWebApplication.class, args);

        System.out.println("--------------------------context----------------------------------");
        System.out.println(context);
        Field single = DefaultSingletonBeanRegistry.class.getDeclaredField("singletonObjects");
        single.setAccessible(true);
        ConfigurableListableBeanFactory factory = context.getBeanFactory();
        System.out.println("--------------------------------------------------------------------");
    }

看一下这个ConfigurableApplicationContext
可以说环境什么的都在里面有体现
在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值