🔎Spring的创建
创建Maven项目
引入Spring依赖
添加如下代码至pom.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>
如果Jar包下载失败
可以参考这篇文章
添加启动类
🔎Spring的使用
Spring 是包含众多工具方法的IOC容器
Spring 作为一个容器. 最基本的功能为
- 将对象存入到容器
- 从容器中取出对象
在 Java 中, 可以将对象称为 Bean
存储Bean
存储 Bean 可以分为2个步骤
- 创建 Bean
- 将 Bean 存储至 Spring
创建 Bean🍂
public class User { public String sayHi() { return "hi!"; } }
将 Bean 存储至 Spring🍂
存储之前, 需要在 resources 下创建xml
文件用于声明Spring
(指引 Spring 的后续操作)
复制如下代码至xml
文件中
<?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>
将 Bean 存储至 Spring
<bean id="user" class="test.User"></bean>
注意🍭
<bean id="" class=""></bean>
- id
- id 是对 Bean 的编号, 此处的 id 不允许重复
- 通常情况下, 存储 Bean 是为了能够将其获取, 而获取 Bean 依赖其对应的 id(编号)
- class
- class 是指 Bean 的类型, 如果 Bean 存储在某一包(Package)下, 需要在前面添加包的包名, 用
.
分隔 - 例如 User 存储在 test 包下, 其
class="test.User"
- 不省略 id 和 class
- 无论 class 是否相同, 只要 id 不同便不会报错(通过 Id 获取 Bean)
- 只要 class 相同, 无论 id 是否相同都会报错(通过 类型 获取 Bean)
- 省略 class 不省略 id 运行时会报错
- 省略 id 不省略 class
- 只有一个该类型时运行不会报错(类型不同)
- 有多个该类型时运行会报错(类型相同)
- 此处的类型包含包名
对于省略 id 不省略 class 的解释🌰
类型(包名 + 类型)不同, 其运行时不会报错
包名 test1, test2
类型 User
<bean class="test1.User"></bean>
<bean class="test2.User"></bean>
类型(包名 + 类型)相同, 运行时会报错
包名 test
类型 User
<bean class="test.User"></bean>
<bean class="test.User"></bean>
获取Bean
获取 Bean 可以分为2个步骤
- 获取 Spring
- 从 Spring 中读取 Bean
- 使用 Bean(非必须)
获取 Spring🍂
- 通过
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
获取 - 通过
BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
获取
注意🍭
configLocation 需要对应 resources 下的 xml 文件
对比ApplicationContext与BeanFactory
相同点🍂
- 都可以获取 Spring
- 都是 Spring 的顶级接口(包含众多的方法)
ApplicationContext
BeanFactory
不同点🍂
- 继承关系
ApplicationContext 属于 BeanFactory 的子类 - 功能
BeanFactory 只有最基础的访问 Bean 的能力
ApplicationContext 除了拥有 BeanFactory 的功能之外, 还包含更多的功能
例如国际化🌐支持, 资源访问, 事件传播… - 性能
ApplicationContext 的加载方式是将 Bean 一次性加载(饿汉模式)
BeanFactory 的加载方式是当需要某个 Bean 时再去加载所需的 Bean(懒汉模式)
继承关系
从 Spring 中读取 Bean🍂
- 根据 Id 获取 Bean
User user = (User) context.getBean("user");
- 需要将获取结果进行强转
- user(Id)
- 根据 类型 获取 Bean
User user = context.getBean(test.User.class);
- test.user(test 包名 / user 类型)
- 根据 Id + 类型 获取 Bean
User user = context.getBean("user", test.User.class);
建议使用 Id + 类型 的方式获取 Bean
对于根据 Id 获取 Bean
当 getBean 的结果为其他引用类型时, (User)其他引用类型 → Error
对于根据 类型 获取 Bean
当 xml 文件中注入多个相同的类型时(不考虑包的情况) → Error
🔎总结
- 操作容器之前, 需要先有容器(创建 Spring 项目)
- 容器的基本功能 — 存对象(存储 Bean)
- 创建 Bean
- 将 Bean 存储至 Spring
- 容器的基本功能 — 取对象(获取 Bean)
- 获取 Spring
- 从 Spring 中读取 Bean