Spring 就是⼀个包含了众多工具方法的 IOC容器。既然是容器那么它就具备两个最基本的功能:
- 将对象存储到容器(Spring)中;
- 从容器中将对象取出来。
在Java中对象也叫做Bean,后续我们就把对象称之为Bean;
目录
1. 创建Spring项目(Maven创建)
1.1 创建一个Maven项目
1.2 添加Spring 框架支持
1.3 添加启动类
2. 存储 Bean 对象
2.1 创建Bean
2.2 将Bean注册到容器
3. 获取并使用Bean对象
3.1 创建 Spring 上下文
3.2 获取指定的 Bean 对象
3.3 使用Bean
4. 整体流程图
1. 创建Spring项目(Maven创建)
整体就分为以下三个步骤
- 1. 创建⼀个普通 Maven 项目。
- 2. 添加 Spring 框架支持(spring-context、spring-beans)。
- 3. 添加启动类。
1.1 创建一个Maven项目
点击下一步
1.2 添加Spring 框架支持
在项⽬的 pom.xml 中添加 Spring 框架的⽀持,xml 配置如下:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>
从上述配置中可以看出,添加的框架有 spring-context:spring 上下文,还有 spring-beans:管理对象的模块。
1.3 添加启动类
public class App {
public static void main(String[] args) {
// 实现代码
}
}
2. 存储 Bean 对象
存储 Bean 分为以下 2 步:
- 1. 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean。
- 2. 将创建的 Bean 注册到 Spring 容器中。
2.1 创建Bean
所谓的 Bean 就是 Java 语⾔中的⼀个普通对象,实现代码如下:
public class User {
public String sayHi(String name) {
return name + " hello!";
}
}
2.2 将Bean注册到容器
在创建好的项⽬中添加 Spring 配置⽂件 spring-config.xml,将此⽂件放到 resources 的根⽬录下,如下图所示:
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"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
接下来,再将 User 对象注册到 Spring 中就可以,具体操作是在 <beans> 中添加如下配置:
3. 获取并使用Bean对象
获取并使⽤ Bean 对象,分为以下 3 步:
- 1. 得到 Spring 上下文对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下文。
- 2. 通过 Spring 上下文,获取某⼀个指定的 Bean 对象。
- 3. 使⽤ Bean 对象。
如果取多个 Bean 的话重复以上第 2、3 步骤。
具体过程如下
3.1 创建 Spring 上下文
两种获取上下文的方式
1. 使用 ApplicationContext(主流)
2. 使用 BeanFactory
1. 使用 ApplicationContext(主流)
// 1.得到 Spring 的上下⽂对象,创建的时候需要配置 Spring 配置信息
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
2. 使用 BeanFactory
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
ApplicationContext 和 BeanFactory 效果是⼀样的,ApplicationContext 属于 BeanFactory 的子类,它们的区别如下。
- 继承关系和功能⽅⾯来说:Spring 容器有两个顶级的接口:BeanFactory 和ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能⼒,⽽ ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
- 从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量。
3.2 获取指定的 Bean 对象
// 1.得到 Spring 上下⽂对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
// 2.加载某个 bean
User user = (User) context.getBean("user");
Bean的id要一一对应。
getBean ⽅法的更多⽤法
getBean() ⽅法有很多种重载⽅法,我们也可以使⽤其他⽅式来获取 Bean 对象,⽐如以下这两种:
1. 根据类型获取 Bean:
UserController user = context.getBean(UserController.class);
2. 名称 + 类型获取 Bean(常用)
UserController user = context.getBean("user", UserController.class);
⼆者的区别:当有⼀个类型被重复注册到 spring-config.xml 中时,只能使用根据名称获取了
3.3 使用Bean
public class App {
public static void main(String[] args) {
// 1.得到 Spring 上下⽂对象
ApplicationContext context =new ClassPathXmlApplicationContext("springconfig.xml");
// 2.加载某个 bean
User user = (User) context.getBean("user");
// 3.调⽤相应的⽅法
System.out.println(user.sayHi("Java"));
}
}
4. 整体流程图
上述是通过在Spring配置文件进行注入Bean对象,我们可以思考一个问题,如果我们在以后的项目中Bean对象特别多的时候,我们还要这样一个一个的添加吗?答案肯定不是,下一章节,我会总结一个更加有效率的注入Bean的方式,在配置文件中配置路径搜索的方法往容器中注入Bean对象,以及通过添加类注解的方式获取Bean对象。