文章目录
Spring
spring概述
1 Spring定义
2 Spring核心
3 Spring Framework的特点
入门案例
1 环境要求
2 构建工程
2.1 构建子工程first-spring
2.2 入门案例
2.3 对象存储
IoC容器
1 控制反转IoC
2 依赖注入DI
3 IoC容器实现
4 基于XML管理bean
4.1 环境准备
4.2 获取bean方式
4.3 基于setter依赖注入
4.4 基于构造器依赖注入
4.5 特殊值处理注入
4.5.1 字面量赋值
4.5.2 null值
4.5.3 xml实体
4.5.4 CDATA区
4.6 对象类型属性注入
4.6.1 引用外部bean
4.6.2 内部bean
4.6.3 级联属性赋值(了解)
4.7 数组类型属性注入
4.8 集合类型属性注入
4.8.1 List集合属性注入
4.8.2 Map集合属性注入
4.8.3 引用集合类型bean注入
4.9 p命名空间
4.10 引入外部属性文件
4.11 bean的作用域
4.12 bean的生命周期
4.12.1 bean的完整生命周期
4.12.2 生命周期验证
4.12.3 bean生命周期扩展
4.13 基于xml自动装配
5 基于注解管理bean
5.1 创建子工程
5.2 开启组件扫描
5.3 使用注解定义Bean
5.4 @Autowired注入
5.4.1 属性注入
5.4.2 set注入
5.4.3 构造方法注入
5.4.4 形参上注入
5.4.5 只有一个构造函数,无注解
5.4.6 @Autowire注解和@Qualifier注解联合
5.5 @Resource注入
5.6 Spring全注解开发
Spring
spring概述
1 Spring定义
Spring是一款主流的Java EE 轻量级开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性和松耦合度的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架的能力。
Spring自诞生以来备受青睐,一直被广大开发人员作为Java企业级应用程序开发的首选。时至今日,Spring俨然成为了Java EE的代名词,成为了构建Java EE 应用的事实标准。
自2004年4月,Spring1.0 版正式发布以来,Spring已经步入到了第6个大版本,即 Spring6,以下内容采用Spring5.3.24正式版本。
2 Spring核心
Spring指的是Spring Framework,通常我们称之为Spring框架。Spring框架是一个分层的面向切面的Java应用程序的一站式解决框架,它是Spring技术栈的核心和基础,是为了解决企业级引用开发的复杂性而创建的。
Spring有两个核心模块:IoC和AOP。
Ioc:Inverse of Control的简写,为 控制反转,指把创建对象交给Spring进行管理。
AOP:Aspect Oriented Programming 的简写,为 面向切面编程。AOP用来封装多个类的公共行为,将那些与业务无关,却为业务模块共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP还解决一些系统层面上的问题,比如日志、事务、权限等。
3 Spring Framework的特点
控制反转:IoC,反转资源获取方向;把自己创建的资源、向环境索取资源变为环境将资源准备好,我们享受资源注入。
面向切面编程:AOP,在不修改源代码的基础上增强代码功能。
容器:Spring IoC是一个容器,因为它包含并管理组件对象的生命周期;组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大降低了使用门槛,大幅度提高了开发效率。
一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方库,而且在Spring旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在Spring Framework 的基础上全部使用Spring来实现。
入门案例
1 环境要求
JDK:Java8-15
Spring:5.3.24
2 构建工程
2.1 构建子工程first-spring
在jsd2303-spring中创建子工程 spring-first
New - Module
点击 Next
Name为spring-first,点击 Finish
2.2 入门案例
① 在spring-first/pom.xml中引入相关依赖,并 刷新maven
② 在工程中创建包 cn.tedu.spring.begin
③ 创建类 User
④ User类中定义方法
public class User {
public void add(){
System.out.println("添加方法...");
}
}
⑤ 创建spring配置文件:resources目录下创建bean.xml
⑥ 在bean.xml中用标签完成对象创建
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">
⑦ 创建测试类cn.tedu.spring.TestUser进行测试
public class TestUser {
public static void main(String[] args) {
// 1.加载spring配置文件,进行对象创建
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
// 2.获取spring创建好的对象
User user = (User) context.getBean("user");
// 3.使用对象调用方法测试
System.out.println("user = " + user);
user.add();
}
}
2.3 对象存储
存放到容器中,查看源码,DefaultListableBeanFactory.java,第164行
key:唯一标识
value:类的定义(描述信息)
可以查看 BeanDefinition 的源码,有类的描述信息,是否初始化的状态等等
IoC容器
IoC 是 Inversion of Control 的简写,译为 控制反转。
Spring通过IoC容器来管理所有的Java对象的实例化和初始化,控制着对象与对象之间的依赖关系。我们将由IoC容器管理的Java对象成为 Spring Bean,它与使用关键字 new 创建的Java对象没有任何区别。
IoC容器是Spring框架中最重要的核心组件之一,它贯穿了Spring从诞生到成长的整个过程。
1 控制反转IoC
控制反转是一种思想
将对象的创建权利交出去,交给第三方容器负责
将对象和对象之间的关系维护权交出去,交给第三方容器负责
如何实现
通过依赖注入DI的方式实现
2 依赖注入DI
DI (Dependency Injection):依赖注入,依赖注入实现了控制反转的思想,是指Spring创建对象的过程中,将对象依赖属性通过配置进行注入。
依赖注入常见的实现方式有两种:
set注入
构造注入
所以 IoC 是一种控制反转的思想,而 DI 是对IoC的一种具体实现。
Bean管理:指Bean对象的创建,以及Bean对象中属性的赋值(或Bean对象之间关系的维护)
3 IoC容器实现
Spring中的IoC容器就是IoC思想的一个落地产品实现。IoC容器中管理的组件也叫做bean。在创建bean之前,首先需要创建IoC容器,Spring提供了IoC容器的两种实现方式
① BeanFactory
这是IoC容器的基本实现,是Spring内部使用的接口。面向Spring本身,不提供给开发人员使用。
② ApplicationContext
BeanFactory的子接口,提供了更多高级特性,面向Spring的使用者,几乎所有场合都使用 ApplicationContext,而不是底层的BeanFactory
源码说明:
③ ApplicationContext的主要实现类
类型
说明
ClassPathXmlApplicationContext
通过读取类路径下的xml格式配置文件创建IoC容器对象
FileSystemApplicationContext
通过文件系统路径读取xml格式配置文件创建IoC容器对象
4 基于XML管理bean
4.1 环境准备
① 创建子工程 spring-ioc-xml
② pom.xml中引入spring依赖,并刷新maven
③ 创建spring配置文件:resources/bean.xml
④ 在工程目录java下创建类 cn.tedu.spring.iocxml.User
public class User {
private String username;
private String password;
public void userMethod(){
System.out.println("userMethod执行~~");
}
}
<