0


【Spring(七)】详细了解Spring的核心容器

文章目录

前言

  前面我们完成

bean

以及

依赖注入

的相关学习,现在我们进入到

核心容器

的最后一块内容了,也就是与容器相关操作的学习🎈🎈。

容器

  前边我们获取容器是这样获取的👇👇。

在这里插入图片描述

  这只是获取容器的其中一种方式,我们管它叫:

加载类路径下的配置文件

,其实Spring还提供有另外一种加载配置文件的方式,也就是使用文件的

绝对位置

,也就是它在哪个盘符下的这种形式来进行加载,那怎么写呢,我们接下来来看看👇👇。

在这里插入图片描述

注意:

里边传递的参数是文件的

绝对路径

,这种方式叫:

从文件系统下加载配置文件

,我们以后肯定用的是第一种,这种方式我们了解一下就好了。

  容器得到了,下面我们就要说获取bean的操作了,我们先来看看

常用

的获取bean的操作👇👇。

在这里插入图片描述

  我们会发现,这种方式获取bean,每次前边都要做

强制类型转换

,这写出来就有点太难受了,这里有一种更好的形式,但是这种形式写出来的代价也有👇👇。

在这里插入图片描述

  这种方式的第二个参数的意思是:

告诉我们获取的bean是什么类型的

,好像这种形式也没什么不一样,只不过放在后边了而已,但是按照这种形式来看,我们似乎可以想象到另外一件事,我们前边是不是学过

自动装配

,里边有一个

按类型装配

,在Spring容器中它是可以按照类型来找一个bean的,那我们能不能按照类型来获取bean呢❓❓,也是可以的,所以有第三种格式👇👇

在这里插入图片描述

  这种形式是不是直接就ok了,但是有一个问题,我们容器中对应的bean只能有

一个

,如果我们有多个的话,肯定是会报错的,因为不唯一,到这里我们就学习了

容器初始化

的两种方式以及

bean加载

的两种方式,在这里我们再来补充一下,在容器初始化中不管用哪种方式,都可以

加载多个配置文件

👇👇。

在这里插入图片描述

  这就是我们与容器相关的两个核心操作❗❗。

  接下来我们要来分析

ApplicationContext接口

,先打开它的

类继承层次图(ctrl+H)

👇👇。

在这里插入图片描述

  我们会看到在它的下边又有一个接口,这个接口里边有一个

close()

方法,也就是说

ApplicationContext

这个接口提供的是

基础功能

,在它的基础之上,它的一个子接口对它进行了功能的追加,而再下边的这些是对上边的实现,一级一级往下走,我们用的是它的两个实现类,这里边就要提出一个问题了,我们ApplicationContext接口,它还有没有上层的接口了,我们来查看一下它的源码👇👇。

在这里插入图片描述

  我们会发现它继承了很多,我们要翻一下它的最顶层的接口是谁,怎么翻呢,我们可以从每一个接口进去看,在这里

ListableBeanFactory接口

往上追就能追到最

顶层

接口👇👇。

在这里插入图片描述

  这个接口有什么用呢,注意:

Spring1.0

的时候最先出来的不是ApplicationContext接口,而是现在这个

BeanFactory接口

,也就是说使用它也能够做我们的这种IOC容器,但是它有它的一些

局限性

,所以后期在它的基础之上发展得到了ApplicationContext接口,并且通过若干子接口的功能的扩张,达到了一个最佳的状态,也就是说现在ApplicationContext接口提供的功能要比BeanFactory接口提供的功能多的多,打开BeanFactory类的继承图我们来看一下👇👇。

在这里插入图片描述

  我们的ApplicationContext在哪呢,在第二个的下边👇👇,再往下,我们就可以找到对应的实现类❗❗

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

  这是它们之间的层次关系,那我们的

BeanFactory

接口能不能创建容器呢,当然可以,接下来我们来看一下,了解即可🎈🎈

在这里插入图片描述

  注意:它在造的时候里边要的

参数

是什么呢,是我们的配置文件吗,当然不是,它是要一个

resource的对象

,那我们就给它一个resource对象,我们在这里用的是它的实现类来造的,里边传递的应该是

配置文件

,这个时候我们就能获取到我们的配置文件,然后初始化出来

BeanFactory

对象了,剩下的就跟前边一样了🎉🎉。

  那对于ApplicationContext和BeanFactory有哪些

核心区别

呢❓❓,有一个区别,就是BeanFactory加载的bean和我们的ApplicationContext加载的bean

加载的时机不一样

❗❗注意看一个东西:我现在把以下两行注掉👇👇

在这里插入图片描述

  现在我们仅仅是造出BeanFactory对象,然后我在BookDaoImpl这边加一个小东西👇👇,我把它的

构造方法

加上,里边就只干一件事,打印一句话,我们再来运行一下程序看看效果。

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

  运行完了,已经执行结束了,这个bean的构造方法都没有被运行,接着回到我们App里边👇👇。

在这里插入图片描述

  我们把这两行也注掉,也是只加载了ApplicationContext,再来运行一下👇👇

在这里插入图片描述

  什么样的差别呢❓❓,叫做BeanFactory它是

延迟加载bean

,ApplicationContext它是

立即加载bean

,也就是启动容器bean直接就初始化好了,而BeanFactory不是,那有人说那我用ApplicationContext能不能做这个效果呢❓❓,当然是可以的,我们只需要在配bean的时候加一个参数:

lazy-init

,给它个true就行了👇👇。

在这里插入图片描述

总结

  以上就是我们核心容器的全部内容,我们先讲了

创建容器的两种方式

,接下来讲了

初始化bean的三种方式

,也看了关于

容器类层次结构

,最后学习了ApplicationContext接口的

顶层接口beanFactory

,最后,如果有什么错误的话,大家可以私信我📬📬,希望大家多多关注+点赞+收藏 _🙏🙏,你们的鼓励是我不断前进的动力💪💪!!!

标签: spring java

本文转载自: https://blog.csdn.net/hihielite/article/details/128729046
版权归原作者 续写青春. 所有, 如有侵权,请联系我们删除。

“【Spring(七)】详细了解Spring的核心容器”的评论:

还没有评论