Spring创建、Bean对象的存储和读取
创始人
2024-04-13 05:00:46
0

文章目录

  • 1、创建Spring项目
    • 1.1 创建Maven项目
    • 1.2 添加 Spring 框架支持
    • 1.3 添加启动类并添加main(非必要步骤)
  • 2、存储Bean对象
    • 2.1 添加Spring配置文件(第一次添加)
    • 2.2 创建Bean对象
    • 2.3 将Bean对象注册到Spring容器中
  • 3、读取并使用Bean对象
    • 3.1 创建 Spring 上下文
    • 3.2 获取指定的 Bean 对象
    • 3.3 使用Bean
  • 整体流程

1、创建Spring项目

使用Maven方式来创建一个Spring项目,创建Spring项目和Servlet项目大体是类似的,总共分三步

  1. 创建⼀个普通 Maven 项⽬
  2. 添加 Spring 框架支持(spring-context、spring-beans)
  3. 添加启动类并添加main(非必要步骤)

1.1 创建Maven项目

创建Maven项目的过程,我在之前的博客已经总结了,在这里就再过多赘述,可以自行查看–》创建Maven项目
不过我这的项目名字叫做spring-1

项目创建完成后,目录大概是这个样子

在这里插入图片描述

注意,这里的java是一个蓝色目录,表示用来存放java文件的根目录,在这个目录下能创建java class文件,但在其他目录下,就不能创建java class文件

1.2 添加 Spring 框架支持

在项⽬的 pom.xml 中添加 Spring 框架的⽀持,xml 配置如下:

org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASE

从上述配置中可以看出,添加的框架有 spring-context:spring 上下⽂,还有 spring-beans:管理对象的模块

添加操作完成后,如果是第一次建Spring项目的话,字体可能是红色的,因此需要我们手动点击刷新一下,才能将这两个jar导入

如果导入失败的话,此时很大概率说明你没有配置国内源
配置国内源


alimavenaliyun mavenhttp://maven.aliyun.com/nexus/content/groups/public/central        

将这段xml代码保存起来,并起名为settings.xml

在这里插入图片描述

在这里插入图片描述

经过以上步骤,再次手动刷新,就能导入jar包了。如果此时字体还是红色的,或者字体不是红色的,但一运行就报错,很有可能你之前没有配置国内源,导致去下载jar包时,不是一个完整的jar包。现在你有去配置国内源,去下载jar包,它会自动监测,发现你本地仓库里有这个jar包,就不会再去下载了

如何解决?

在这里插入图片描述

找到这个目录,将里面已经下载好的jar包,全部删掉,重新下载一遍。如果现在还是不行,就很有可能是网络太差

1.3 添加启动类并添加main(非必要步骤)

这个步骤是非必要的,那为什么还要进行这步操作呢?
我们测试Bean对象的存入和取出,不需要依赖Tomcat,因此就需要一个测试的类

在java目录下添加一个启动类,启动类的名字叫啥都行,在这个类中写一个main方法,随便来一条打印语句,如果能运行成功,表明Spring项目就创建成功了

在这里插入图片描述

2、存储Bean对象

存储 Bean 分为以下 3/2步:

  1. 如果是第一次添加,现在Spring项目中添加配置文件,非第一次此步骤省略
  2. 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean 对象
  3. 将创建的 Bean 注册到 Spring 容器中

2.1 添加Spring配置文件(第一次添加)

在resources中新建一个文件,名字一般为spring-config.xml,起到见名知意的效果,表明它是一个关于spring的配置文件

在这里插入图片描述

并将以下xml代码拷贝到该文件中




2.2 创建Bean对象

在java目录下,随便建一个Bean对象即可

在这里插入图片描述

2.3 将Bean对象注册到Spring容器中

2.1步骤中,我们已经配置好了spring-config.xml文件,注册就是将bean节点放在中,具体添加如下配置

在这里插入图片描述

id就是你给这个bean取个名字,名字叫啥都行,取的时候也要按名字来取,但是我们尽量取个有标识性的名字(bean id 通常使用小驼峰)
class就是实际要存储的bean对象

整体含义:将com下的,beans下的User对象存入到Spring中,并取名为User

3、读取并使用Bean对象

获取并使用 Bean 对象,分为以下 3 步:

  1. 得到 Spring 上下⽂对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下⽂。
  2. 通过 Spring 上下⽂,获取某⼀个指定的 Bean 对象。
  3. 使⽤ Bean 对象。

如果取多个 Bean 的话重复以上第 2、3 步骤

3.1 创建 Spring 上下文

Spring 上下文对象可使用 ApplicationContext,在启动类中的main方法中添加如下代码:

//得到 Spring 的上下⽂对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

除了 ApplicationContext 之外,我们还可以使⽤ BeanFactory 来作为 Spring 的上下⽂,如下代码所示:

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

经典面试题:ApplicationContext 和 BeanFactory 有什么区别?

相同点

都可以实现从容器中获取 bean,都提供了 getBean 方法

不同点

1.ApplicationContext 属于 BeanFactory 的⼦类, BeanFactory 只提供了基础访问 Bean 的方法,而 ApplicationContext 除了拥有 BeanFactory 所以功能之外,还提供了更多方法的实现,比如对国际化的支持、资源访问的支持、以及事件和传播等方面的支持
2.从性能方面来说二者是不同的,BeanFactory 是按需要加载 Bean,属于懒汉模式。而ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,属于饿汉模式

可以创建一个Test类,进行测试

public class Test {public Test() {System.out.println("加载了Test");}
}

使用ApplicationContext
在这里插入图片描述

ClassPathXmlApplicationContext 属于 ApplicationContext 的子类,拥有ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的

使用BeanFactory
在这里插入图片描述
这里的XmlBeanFactory方法被划上线的原因是这个方法比较老,说不定会在未来的某一天将它舍弃

3.2 获取指定的 Bean 对象

根据bean name(id) 来获取 bean

//2.根据上下文对象提供的方法获取到bean
User user = (User) context.getBean("user");

getBean中的参数就是bean的id

在这里插入图片描述

并且返回值是Object,需要我们进行类型转换

在以往中,获取对象,是需要我们通过new来构造一个对象的,构造的参数也要和构造方法中参数保持一致。而在这里,我们并不需要关系

根据 bean type 获取 bean

User user = (User) context.getBean(User.class);

当同一个类型被注入到spring中多次时,就会报错,例如:

在这里插入图片描述

在这里插入图片描述

根据 bean name(id) 和类型获取 bean

User user = context.getBean("user", User.class);

这种方式解决了同一个类型被注入到spring中的问题,也不需要进行类型转换,最多返回null。反观根据 bean name(id) 获取 bean 这种方式,它是可能存在强转null的情况。

3.3 使用Bean

直接通过上述获取到的bean对象,调用sayHi方法

user.sayHi("冯同学");

在这里插入图片描述

整体流程

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...