目录
1.1 使用 ApplicationContext 作为Spring上下文
1.2 使用 BeanFactory 作为Spring上下文
4. Application 和 BeanFactory的区别
一. 创建 Spring项目
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.26</version>
</dependency>
二. 存储 Bean 对象到Spring中
1. 添加Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
</beans>
2. 创建一个 Bean 对象
3. 将 Bean 存储到 Spring 容器中
使用 Bean 标签来存储,id 关键字表示Bean对象的名称,class 关键字表示该类的路径(包名+类名)。
三. 从 Spring 中获取并使用 Bean 对象
1. 创建 Spring 上下文
1.1 使用 ApplicationContext 作为Spring上下文
1.2 使用 BeanFactory 作为Spring上下文
2. 从 Spring 中获取到指定的 Bean 对象
getBean()方法返回的类型是Object,因此要记得进行类型转换;
BeanFactory 同理;
3. 使用 Bean
BeanFactory同理;
4. Application 和 BeanFactory的区别
首先创建一个 Teacher类和 Student类,并设置其构造方法;
存储两个 Bean 对象到 Spring 容器中,分别为 Student类 和 Teacher类;
观察运行结果:
可以看出 ApplicationContext 在执行创建 ApplicationContext 对象的时候,就把配置文件中所有Bean对象创建存储在 Spring容器中了,而 BeanFactory只有在执行 getBean() 方法的时候才去加载对应的Bean对象,且不是把配置文件中所有Bean对象都加载,而是只加载getBean()方法对应的Bean对象。
5. 获取 Bean 的三种方法
1. 通过名称获取
Student student = (Student) applicationContext.getBean("student"); // 根据名称获取
方法返回 Object 对象,因此需要进行强转;并且不允许 Spring 容器中同时存在多个对象名称相同的Bean,否则会报错;
且当 getBean() 方法返回 null 时,也就是找不到对应 id 的 Bean 对象时,也会抛出异常;
2. 通过类型获取
Student student =applicationContext.getBean(Student.class); // 根据类型获取
这种方法就避免了强制类型转换,但是当同一个类在spring容器当中注入了两个不同的对象的时候,就会抛出异常。
3. 通过名称+类型方式获取
Student student = applicationContext.getBean("student",Student.class); // 根据名称+类型查询对象
此方法相比于前面两种就更加的严谨明确了,所以平时使用的更多。
补充说明:通过 Spring 上下文对象 getBean() 方法获取到 Bean 对象就是所谓的 DI 操作。