「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」
接上回,我们讲到BeanFactory做为我们的IOC容器,现在我们讲讲Spring的另一个IOC容器接口ApplicationContext。
ApplicationContext
applicationContext作为spring的另一个IOC容器接口,它继承了BeanFactory所有的功能。我们先来看下它的继承结构:
可以看到它所集成的功能还是挺多的,我们来看看各个接口都是做什么用的。
ListableBeanFactory
扩展了BeanFactory,提供了一系列的接口,让客户端可以列出所有的bean定义。
HierarchicalBeanFactory
让容器之间可以有父子关系,提供配置父级容器的方法。
ResourceLoader
Spring将资源进行了抽象,并提供资源加载的策略,ResourceLoader就是为这些抽象资源提供加载的能力,如:url表示的资源,文件系统file表示的资源,流中的资源的加载都是由它去实现的,Spring在启动时可以用它进行配置文件的读取。
MessageSource和ApplicationEventPublisher
这两个主要负责事件的发布,Spring容器本身作为事件源发布容器的启动、关闭、刷新等事件,如果我们有自定义的事件发布也是由它来负责。
资源抽象
上面我们讲到Spring对资源进行了一定程度的抽象,这个抽象接口为org.springframework.core.io.Resource,这个接口提供了资源的描述信息,保存了资源的元数据,如:文件名、是否存在、资源的二进制流管道等。通过这个接口,Spring对各种资源的描述进行了统一,其下的扩展接口如下:
WritableResource // 提供资源的写入功能
ContextResource // 提供从IOC上下文的资源描述
UrlResource // 提供url的资源描述
FileUrlResource // 文件url资源描述
FileSystemResource // 文件系统上的资源描述
ClassPathResource // 提供了类路径的资源描述
ByteArrayResource // 二进制资源描述
InputStreamResource // 输入流类型的资源描述
有了资源信息,资源怎么加载就由ResourceLoader去进行。这时Spring就可以读取我们所定义的配置文件信息了。