一、引言
引言
- 背景:2002年, 由 罗德 约翰森 创作
- 定义:Spring框架是一个集众多设计模式(工厂、单例、代理、策略…)于一身的开源的、轻量级的 项目管理框架。致力于JAVAEE轻量级解决方案。
- 轻量级解决方案:提供一个简单地、统一的、高效的方式构造整个应用,可将单层框架以最佳的组合糅合在一起建立一个连贯的体系。
- 特点:Spring框架的本质不是替换项目中的某个技术,而是将项目中原有的单层框架进行整合、管理开发。
Spring框架的核心作用
- 项目管理框架:对现有项目中的组件进行管理(创建 | 使用 | 销毁);
用来负责项目中组件对象的创建、使用、销毁
组件:action、service、dao
[注]:entity组件不交给spring进行管理
二、Spring开发
- 引入Spring框架相关依赖
Spring-core :核心依赖
Spring-context
Spring-beans
Spring-web
Spring-expression
Spring-jdbc
Spring-aspects
Spring-context-support - 引入Spring框架配置文件
配置文件:名字随便(默认:applicationContext.xml) 无位置要求 - 通过spring管理组件
bean:管理组件对象的创建
class:指定所管理组件对象的全限定名
id:指定spring框架创建的当前组件对象在spring(容器|工厂)中唯一标识,全局唯一。 - 启动工厂,获取对象
1)启动工厂:ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“init/spring.xml”);
【注】参数为 spring配置文件的目录结构
2)获取工厂中指定对象: UserDao userDaoImpl = (UserDao) context.getBean(“userDaoImpl”);
【注】参数为 spring配置文件中 当前对象的bean标签的唯一标识id属性值
三、Spring框架的核心思想
IOC思想
-
IOC:Inversion Of Control 控制反转、反转控制
定义:控制反转,即控制权力的反转。也就是将手动new对象的权力移交给spring,通过在spring配置文件中配置bean标签的形式创建对象的过程。 -
DI: Dependency Injection 依赖注入
定义:为组件中成员变量完成赋值的过程,称之为依赖注入
语法:
1.组件对象中需要哪个组件,就将哪个组件 声明为成员变量并提供公开的set方法
2.在spring的配置文件中对应的组件标签内完成属性的赋值操作
property:用来给组件中的私有属性进行赋值操作
name:指定组件中的哪个私有属性
ref :指定赋值对象在工厂中的唯一标识 -
IOC 全部概述:控制反转,就是将手动new创建对象的权力移交给spring,由spring工厂创建对象过程,同时通过DI的方式维护组件与组件调用关系的思想
-
Set注入
1)八种基本类型+String+Data 使用property标签的value属性赋值
context.getBean(“userDaoImpl”);
【注】参数为 spring配置文件中 当前对象的bean标签的唯一标识id属性值
三、Spring框架的核心思想
IOC思想
-
IOC:Inversion Of Control 控制反转、反转控制
定义:控制反转,即控制权力的反转。也就是将手动new对象的权力移交给spring,通过在spring配置文件中配置bean标签的形式创建对象的过程。 -
DI: Dependency Injection 依赖注入
定义:为组件中成员变量完成赋值的过程,称之为依赖注入
语法:
1.组件对象中需要哪个组件,就将哪个组件 声明为成员变量并提供公开的set方法
2.在spring的配置文件中对应的组件标签内完成属性的赋值操作
property:用来给组件中的私有属性进行赋值操作
name:指定组件中的哪个私有属性
ref :指定赋值对象在工厂中的唯一标识 -
IOC 全部概述:控制反转,就是将手动new创建对象的权力移交给spring,由spring工厂创建对象过程,同时通过DI的方式维护组件与组件调用关系的思想
-
Set注入
1)八种基本类型+String+Data 使用property标签的value属性赋值
context.getBean(“userDaoImpl”);
【注】参数为 spring配置文件中 当前对象的bean标签的唯一标识id属性值
三、Spring框架的核心思想
IOC思想
-
IOC:Inversion Of Control 控制反转、反转控制
定义:控制反转,即控制权力的反转。也就是将手动new对象的权力移交给spring,通过在spring配置文件中配置bean标签的形式创建对象的过程。 -
DI: Dependency Injection 依赖注入
定义:为组件中成员变量完成赋值的过程,称之为依赖注入
语法:
1.组件对象中需要哪个组件,就将哪个组件 声明为成员变量并提供公开的set方法
2.在spring的配置文件中对应的组件标签内完成属性的赋值操作
property:用来给组件中的私有属性进行赋值操作
name:指定组件中的哪个私有属性
ref :指定赋值对象在工厂中的唯一标识 -
IOC 全部概述:控制反转,就是将手动new创建对象的权力移交给spring,由spring工厂创建对象过程,同时通过DI的方式维护组件与组件调用关系的思想
-
Set注入【重点】
1)注入 八种基本类型+String+Data 使用property标签的value属性赋值
Data在配置文件中格式为(yyyy/MM/dd HH:mm:ss)
2)注入 引用类型(对象类型)使用 property标签的ref属性赋值
3)注入 数组类型 使用 array和value或ref 标签 赋值4)注入 集合类型
List: list和value或ref标签
Set: set和value或ref标签
Map: map和entry标签
properties: props和prop标签 -
构造注入
语法:需要哪个组件就声明为成员变量,并提供公开的构造方法
在配置文件中使用<'constructor-arg>标签进行注入 -
自动注入
在Spring工厂配置文件中通过制定自动注入方式,开启组件属性的自动赋值
注意:1)底层使用原理为 Set方式注入
2)自动注入需要在对应组件标签开启才能使用
3)只能用于引用类型(对象类型)组件的注入
语法:1)需要谁将谁声明为成员变量,并提供Set方法
2)在对应组件标签中加入autowire属性并指定自动注入方式
byType:通过属性的类型自动完成匹配注入,找不到不赋值。【注】若存在多个类型一致的组件,使用自动类型注入会报错
byName:根据成员变量的名字去工厂中获取与之对应一直的名字,找不到不赋值。
四、Spring工厂的相关特性
- Spring中工厂创建对象的模式
1)默认Spring在管理组件对象 使用单例创建 singleton
2)如何修改工厂创建组件对象为多例
由于Struts2的action是多例的,必须以多利形式管理
解决方式:
<'bean id="…" class="…" scope="singleton | prototype(多例)"> - Spring工厂创建对象的原理
原理:反射+构造函数
Class.forName(“类全限定名”).newInstance();即可拿到对应对象 - Spring工厂管理组件生命周期
①组件对象什么时候创建
②组件对象什么时候销毁
1)单例
生命周期:init-method属性 destroy-method属性:
工厂启动所有单例的对象随之创建,工厂关闭所有单例对象随之销毁
2)多例
每次在工厂中获取时创建,对于多例对象的销毁不作处理,JVM去销毁 - Spring框架的优点:
1)解耦合:使用配置文件管理java类,再生产环境中更换类的实现时不需要重新部署,修改文件即可
2)Spring默认使用单例的模式创建对象,减少内存的占用
3)通过依赖注入建立了类与类之间的关系,使java之间关系更为清晰,方便维护与管理