Spring 是⼀个包含了众多⼯具⽅法的 IoC 容器。那么它就具备以下功能:
1.将对象存储到容器中
2 从容器中将对象取出来
Spring的创建
使⽤ Maven ⽅式来创建⼀个 Spring 项⽬,总共分为三步:
- 创建一个普通的Maven项目
- 添加Spring框架支持(spring-context、spring-beans)
- 添加启动类
1.创建一个普通的Maven项目
然后点击下面创建
2.添加spring框架支持
在项目的pom.xml中,添加spring框架支持,xml的配置如下:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.3.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> <dependency>
上述添加的模块有spring-context :spring上下文 ,还有 spring-beans:管理对象模块
3.添加启动类
在创建好的项目中的java文件夹中创建一个启动类,包含main方法即可:
public class Test { public static void main(String[] args) { } }
存储Bean对象
存储Bean对象分为以下两步:
- 创建Bean
- 将创建的Bean注册到Spring容器当中
1. 创建Bean
Bean就是Java中的一个普通对象,实现代码如下:
public class User { public String sayHi(String name){ return name+"你好!"; } }
2.将Bean注册到容器当中
在 resources 根⽬录下添加Spring配置文件spring-config.xml
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>
在<beans>
中添加如下配置,即可将User对象注册到Spring中去
<bean id="user" class="User"></bean>
获取并使用Bean对象
获取并使用Bean对象需要三步:
- 得到Spring上下文
- 通过Spring上下文,获取某一个指定的Bean对象
- 使用Bean对象
1.得到Spring上下文
Spring 上下⽂对象可使⽤ ApplicationContext得到,实现代码如下:
//获取spring上下文,创建的时候需要配置 Spring 配置信息 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
也可以使用BeanFactory得到Spring上下文
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
两者效果是一样的,ApplicationContext是BeanFactory的子类
常见面试题
ApplicationContext与BeanFactory
1.继承关系和功能⽅⾯来说:Spring 容器有两个顶级的接⼝:BeanFactory 和ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能⼒,⽽ ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持
2.从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量。
2. 获取指定Bean对象
//获取指定的Bean对象,使用名称获取 User user = (User) applicationContext.getBean("user"); //获取指定的Bean对象类型进行获取 User user = (User) applicationContext.getBean(User.class); //获取指定的Bean对象名称+类型进行获取 User user = (User) applicationContext.getBean("user",User.class);
注意
当有⼀个类型被重复注册到 spring-config.xml 中时,只能使⽤根据名称获取。
3. 使用Bean对象
public class Test { public static void main(String[] args) { //获取spring上下文,创建的时候需要配置 Spring 配置信息 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml"); //BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml")); //获取指定的Bean对象名称+类型进行获取 User user = (User) applicationContext.getBean("user",User.class); //调用指定对象相应方法 System.out.println(user.sayHi("朱星星")); } }
运行main方法
总结
- 操作容器之前,需要先得到容器。
- 存对象
- 创建 Bean
- 将 Bean 注册(配置)到 spring-confing.xml 中
- 取对象
- 得到 Spring 上下⽂,并读取到 Spring 的配置⽂件
- 获取某⼀个 Bean 对象
- 使用Bean对象