Spring 就是一个包含了众多工具方法的 IoC 容器。既然是容器那么它就具备两个最基本的功能
将对象存储到容器(Spring)中;
从容器中将对象取出来
在 Java 语言中对象也叫做 Bean,所以后面咱们再遇到对象就以 Bean 著称
使用 Maven 方式来创建⼀个 Spring 项目,创建 Spring 项目和 Servlet 类似,总共分为以下 3 步:
在项目的 pom.xml
中添加 Spring 框架的支持,xml 配置如下:
<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>
从上述配置中可以看出,添加的框架有 spring-context:spring
上下文,还有 spring-beans
: 管理对象的模块
——如果一直不成功,可以配置国内的源:
设置 Settings & New Projects Settings 选中,配置文件 settings.xml
——导入成功:
在创建好的项目 java 文件夹下创建一个启动类,包含 main 方法即可
public class App {
public static void main(String[] args) {
System.out.println("hello spring");
}
}
存储 Bean 分为以下 2 (/3) 步:
创建 spring-config.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
Bean 就是 Java 语言中的一个普通对象,创建 User
类,写一个 sayHi 方法,实现代码如下:
在创建好的项目中添加 Spring 配置文件 spring-config.xml
,将此文件放到 resources 的根目录下:
PS: id 可以不等于 class 里面的类名的,但是要尽量符合规范
类名使用大驼峰,bean id
通常使用的是小驼峰。假设类名是 UserInfo,那么通常情况下 id 它应该是 userlnfo
——使用 ApplicationContext
使用 bean 对象 调用我们上面在 User 中写得 sayHi 方法,运行结果:hello: 张三!
除了 ApplicationContext
之外,我们还可以使用 BeanFactory
来作为 Spring 的上下文,如下代码所示:
ApplicationContext
和BeanFactory
效果是⼀样的,ApplicationContext 属于 BeanFactory 的子类,它们的区别如下:
ApplicationContext VS BeanFactory:(常见面试题)
——相同点:
——不同点:
BeanFactory
和 ApplicationContext
BeanFactory
只提供了基础的访问容器的能力 getBean()
方法,而 ApplicationContext
属于 BeanFactory
的子类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化支持、资源访问支、以及事件传播等方面的支持。ApplicationContext
是一次性加载并初始化所有的 Bean 对象,而 BeanFactory
是需要那个才去加载那个,因此更加轻量——创建 Article
类,代码如下:
package com.beans;
public class Article {
public Article() {
System.out.println("加载了 Article");
}
public void sayHi() {
System.out.println("hello Article");
}
}
——修改 User 类,代码:
package com.beans;
public class User {
public User() {
System.out.println("加载了 User");
}
public void sayHi(String name) {
System.out.println("hello: " + name + "!");
}
}
——将 Article 对象存储到容器中,在 spring-config.xml 中添加:
<bean id="article" class="com.beans.Article"></bean>
证实 ApplicationContext
是一次性加载并初始化所有的 Bean 对象
运行程序,没有加载对象
BeanFactory
需要那个才去加载那个
1、使用 bean name 获取 bean
User user = (User) context.getBean("userInfo");
2、根据 bean type 获取 bean
User user = context.getBean(User.class);
在配置文件中加入这两条:
<bean id="userInfo" class="com.beans.User"></bean>
<bean id="user" class="com.beans.User"></bean>
运行结果:
3、根据 bean name 和类型获取 bean
User user = context.getBean("user", User.class);
操作容器之前,先要有容器,所以先要得到容器
存对象
取对象
操作流程如下图所示: