Spring-1 初识BeanFactory与ApplicationContext

这篇文章先简单的认识一下BeanFactory与ApplicationContext

在这里插入图片描述

这是平时每个springboot项目都有的一个启动类,用于启动项目,其实这个run方法的返回值,返回的就是我们的spring容器

在这里插入图片描述

ConfigurableApplicationContext就是我们启动后的容器,它继承了ApplicationContext,来看看它的类图
在这里插入图片描述
而ApplicationContext类又间接的集成了BeanFactory。但是它对BeanFactory提供能很多功能的扩展

初识BeanFactory

什么是BeanFactory呢?

  • 它是 ApplicationContext 的父接口
  • 它才是 Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能

为什么说是组合了他的功能呢?
我们看看ApplicationContext的getBean方法具体实现

在这里插入图片描述
在这里插入图片描述
可以看到内部是使用BeanFactory来调用的getBean方法。
或者启动容器看看ApplicationContext 的内部结构
在这里插入图片描述
可以看到内部持有一个BeanFactory对象,它里面就有很多我们熟悉的属性了,比如singletonObjects,存放的就是我们的单例对象
在这里插入图片描述

接下来看看BeanFactory内部

在这里插入图片描述
可以看到,其实它的功能很少。而它的主要实现类是DefaultListableBeanFactory,可以看看它的类图
在这里插入图片描述

到这里我们知道了BeanFactory 能干点啥呢?

  • 表面上只有 getBean方法
  • 实际上控制反转、基本的依赖注入、直至 Bean 的生命周期的各种功能, 都由它的实现类提供

初识ApplicationContext

在这里插入图片描述
从类图我们能看到,ApplicationContext的扩展功能主要集中在右边这4个父接口上,分别是
MessageSourceResourcePatternResolverApplicationEventPublisherEnvironmentCapable
接下来就一个一个看看他们的功能

MessageSource 提供处理国际化资源的能力

像多语言相关的配置,一般都是放在resources下
在这里插入图片描述
在这里插入图片描述
接下来通过getMessage方法来获取试试
在这里插入图片描述
控制台打印如下,可以看到对应的多语言,这就是MessageSource所提供的功能。
在这里插入图片描述

ResourcePatternResolver 提供根据通配符匹配资源的能力,像磁盘路径,类路径等去匹配资源

在这里插入图片描述
有两个方法,分别是根据路径或者通配符获取单个资源和多个资源。
在这里插入图片描述
比如这样,就是获取classpath下application.properties这个文件,我们来打印一下
在这里插入图片描述
成功的找到了这个资源。

我们在写一个找到多个资源的例子,我们都知道springboot在启动的时候回去找到META-INF目录下一个叫spring.factories的文件,这些文件里有自动配置相关的信息
在这里插入图片描述
看看启动后打印的信息
在这里插入图片描述
可以看到一共找到了6个文件,可以看出这个方法能够根据通配符一下找到多个需要的资源。

ApplicationEventPublisher 提供发布事件的能力

在这里插入图片描述
主要通过pupblishEvent方法来发布事件,那事件从哪来呢,我们需要自定义一个类,来继承ApplicationEvent类
在这里插入图片描述
然后就可以通过pupblishEvent方法发事件了在这里插入图片描述
但是我们还需要一个地方来接收事件,接收事件的我们叫做监听器,我们任何一个类都可以作为监听器。
我们可以随便找一个类,定义一个方法,方法名可以随便定义,但是接收的参数是有要求的,我们发的是什么类型的事件,这边接收的就需要是什么类型的事件,然后需要在方法上加一个@EventListener注解,表面他是一个监听器。
收到之后要做什么就由业务决定了
在这里插入图片描述
启动之后能看到控制台执行了监听器里的log打印,这就是事件的使用,他的主要作用其实就是解耦。就像我们的MQ一样。

EnvironmentCapable 提供读取一些环境信息的能力,像环境变量,yaml文件,properties文件的键值等:

在这里插入图片描述
在这里插入图片描述

如图可以看出EnvironmentCapable就是通过getEnviroment方法来获取一些系统信息的,有的来自环境变量,有的来自配置文件。

好的。下一篇文章来具体了解BeanFactory的实现

公众号同步更新

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值