Spring1️⃣入门使用、配置
Spring
基于 Spring 5.3.9 学习
Spring 是一个轻量级的控制反转、面向切面编程的容器。
解决企业应用开发的复杂性:使用 JavaBean 代替复杂的 EJB
-
特点:轻量级、开源、非入侵式
-
核心:IoC、AOP(之后会详解)
- IoC:Inversion of Control,控制反转
- AOP:Aspect Oriented Programming,面向切面编程
-
优势
- 方便解耦,简化开发
- AOP 编程
- 声明式事务
- 方便程序测试
- 方便集成框架
- 降低 JavaEE 开发难度
- 源码学习
有关起源
- 2002年,首次推出了 Spring 框架的雏形:interface 21框架
- 2004年3月24日, Spring 框架以 interface 21 框架为基础重新设计,发布了1.0正式版;
- Rod Johnson:Spring Framework 创始人,悉尼大学计算机学位和音乐学位,音乐学博士学位。
获得Spring
-
官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/
-
Maven:https://mvnrepository.com/artifact/org.springframework/spring-webmvc
1、入门
先不管原理是什么,体验一下 Spring 的开发流程。
- 导入 Spring 开发所需的项目依赖。
- 编写业务类(通常是接口和实现类)。
- 配置元数据:创建 Spring 核心配置文件,配置业务类(通常是实现类)。
- 通过 Spring API 获得 Bean 实例。
项目依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
1.1、案例一
演示:如何获取对象
编写业务类
// 实体类
public class Hello {
public void say(){
System.out.println("Hello!!!");
}
}
配置元数据
-
核心配置文件:通常命名为
applicationContext.xml
-
配置业务类:使用 bean 标签,id 为对象名,class 为对象的全限类名
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="hello" class="indi.jaywee.Hello"></bean> </beans>
获取 Bean 实例
-
实例化容器:根据配置文件加载元数据,装配 bean 对象
-
获取对象:根据 bean 的 ID(可选参数:指定对象 class 类型)。
-
使用对象
@Test public void test() { // 实例化容器 ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); // 获取对象 Hello hello = context.getBean("hello", Hello.class); // 使用对象 hello.say(); }
1.2、案例二
演示:如何为对象属性赋值
public class HelloSpring {
private int id;
private String name;
// getter、setter、toString() 等方法
}
-
配置元数据:bean 标签的子标签——property
-
name:属性名
-
value:基本类型或 String(引用类型使用 ref 属性)
<bean id="hello1" class="indi.jaywee.HelloSpring"> <property name="id" value="7"/> <property name="name" value="jaywee"/> </bean>
-
-
测试
-
实例化容器
-
获取对象
@Test public void test() { // 实例化容器 ApplicationContext context = new ClassPathXmlApplicationContext("helloBeans.xml"); // 获取对象 HelloSpring hello = context.getBean("hello1", HelloSpring.class); // 使用对象 System.out.println(hello); }
-
2、Spring 配置
Spring 配置文件,基本上都是围绕 Bean 来展开的。
2.1、bean 标签
将对象注册到 Spring 容器中,由 Spring 管理。
基本属性
-
id:Bean 实例在 Spring 容器中的唯一标识。
-
class:Bean 的全限类名
<bean id="hello" class="indi.jaywee.Hello"> </bean>
2.1.1、scope 属性
Bean 对象作用域
- 常见
- 单例:全局共享同一个 Bean 实例(默认)
- 原型:每次从容器中获取 Bean 时,得到一个新的对象实例(多例)
- web 项目(关于以下几个对象作用域的讲解:本文末尾)
- 请求:每个 HttpRequest 对象有一个实例。
- 会话:每个 Session 对象有一个实例。
- 应用:每个 ServletContext 对象有一个实例。
不同作用域的 Bean
- 单例
- 创建:读取元数据时(Spring 核心文件被加载)
- 销毁:当应用卸载,容器销毁时。
- 原型
- 创建:调用
getBean()
获取对象时。 - 销毁:对象长时间不用,被 Java 垃圾回收。
- 创建:调用
2.1.2、name 属性
给 Bean 起一个或多个别名
多个别名之间用【空格/逗号/分号】分割
<bean id="hello" class="indi.jaywee.pojo.HelloSpring" name="hello3 hello4,hello5;hello6">
<property name="id" value="7"/>
<property name="name" value="jaywee"/>
</bean>
2.1.3、生命周期相关属性
关于 Bean 生命周期,之后会讲解
init-method
:初始化方法名称destory-method
:销毁方法名称
2.2、alias 标签
相当于 bean 标签的 name 属性
-
name:起别名的 Bean。
-
alias:别名。
<bean id="hello" class="indi.jaywee.pojo.HelloSpring"> <property name="id" value="7"/> <property name="name" value="jaywee"/> </bean> <alias name="hello" alias="hello1"/> <!-- 为别名起别名,相当于多个别名 --> <alias name="hello1" alias="hello2"/>
2.3、import
实际开发中,Spring 配置很多,需要分模块开发编写配置文件
通过 import 标签,合并配置文件
<!-- resource指定文件名 -->
<import resource="application-xxx.xml"/>
<import resource="application-yyy.xml"/>
<import resource="application-zzz.xml"/>
实例化容器时,只需传入总核心配置文件。
// 实例化容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");