> 文章列表 > Spring 的创建和使用

Spring 的创建和使用

Spring 的创建和使用

目录

一. 创建 Spring项目

二. 存储 Bean 对象到Spring中

1. 添加Spring配置文件 

2. 创建一个 Bean 对象

3. 将 Bean 存储到 Spring 容器中

三. 从 Spring 中获取并使用 Bean 对象

1. 创建 Spring 上下文

1.1 使用 ApplicationContext 作为Spring上下文

1.2 使用 BeanFactory 作为Spring上下文

2. 从 Spring 中获取到指定的 Bean 对象

3. 使用 Bean

4. Application 和 BeanFactory的区别

5. 获取 Bean 的三种方法


一. 创建 Spring项目

1. 创建Maven项目;

2. 在pom.xml 中添加 Spring 框架支持,如下代码;(此处注意版本的对应)

3. 添加启动类,测试运行; 

(此处可以进行 Maven 的国内源配置)

<!-- 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上下文

ApplicationContext app = new ClassPathXmlApplicationContext(配置文件名);

1.2 使用 BeanFactory 作为Spring上下文

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(配置文件名));

2. 从 Spring 中获取到指定的 Bean 对象

使用 getBean(Bean对象的名称) 方法获取; 

 

getBean()方法返回的类型是Object,因此要记得进行类型转换; 

BeanFactory 同理; 

3. 使用 Bean

BeanFactory同理;

4. Application 和 BeanFactory的区别

两者都可以从 Spring 中获取 Bean对象; 

 ApplicationContext继承于BeanFactory。

首先创建一个 Teacher类和 Student类,并设置其构造方法;

存储两个 Bean 对象到 Spring 容器中,分别为 Student类 和 Teacher类; 

  观察运行结果:

可以看出 ApplicationContext 在执行创建 ApplicationContext 对象的时候,就把配置文件中所有Bean对象创建存储在 Spring容器中了,而 BeanFactory只有在执行 getBean() 方法的时候才去加载对应的Bean对象,且不是把配置文件中所有Bean对象都加载,而是只加载getBean()方法对应的Bean对象。

ApplicationContext 比较费内存,一次性加载并初始化所有的 Bean 对象,之后的读取会非常快,效率高;

BeanFactory 节省内存,调用时才会加载初始化 Bean 对象到 Spring 中,效率不高; 

5. 获取 Bean 的三种方法

1. 通过名称获取 

getBean(Bean对象的名称);

Student student = (Student) applicationContext.getBean("student");        // 根据名称获取

方法返回 Object 对象,因此需要进行强转;并且不允许 Spring 容器中同时存在多个对象名称相同的Bean,否则会报错;

且当 getBean() 方法返回 null 时,也就是找不到对应 id 的 Bean 对象时,也会抛出异常; 

2. 通过类型获取 

getBean(Bean对象的类);

Student student =applicationContext.getBean(Student.class);            // 根据类型获取

这种方法就避免了强制类型转换,但是当同一个类在spring容器当中注入了两个不同的对象的时候,就会抛出异常。

3. 通过名称+类型方式获取 

 getBean(Bean对象的名称,Bean对象的类);

Student student = applicationContext.getBean("student",Student.class);  // 根据名称+类型查询对象

此方法相比于前面两种就更加的严谨明确了,所以平时使用的更多。

补充说明:通过 Spring 上下文对象 getBean() 方法获取到 Bean 对象就是所谓的 DI 操作。