Day01:
学习Spring框架第一天:
分类:
控制反转(IOC):
概述:
控制对象创建销毁
将对象的控制权交给IOC容器
IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
作用:
降低耦合;利于功能复用
三种加载方式 获取应用上下文
1: ClassPathXmlApplicationContext: 从类的根路径下加载配置文件
2: FileSystemXmlApplicationContext: 从硬盘路径下加载配置文件
3: AnnotationConfigApplicationContext: 基于java的配置类 加载Spring的应用上下文配置
基于xml配置文件的 Spring-IOC :
入口:
使用Bean工厂(applicationContext)
通过 ClassPathXMLApplicationContext 加载 XML配置文件;
使用 Bean工厂 .getBean() 方法 根据bean的名称获取是实例化对象
bean标签:
1. 属性:
- id: bean的唯一标识
- class:实现类的全限定名称
- name: bean的名称 – 多个别名 ","隔开 不能重复
- scope: 作用范围
- init-method: bean初始化方法名称
- destory-method: bean销毁方法名称
2. 作用范围:
scope:
- singleton(默认):单例 所有请求使用一个对象
- prototype: 多例 每次请求创建一个对象
- web项目中:
request: 将bean 存放到request域
session:将bean 存放到session
global session: 应用在集群环境下; 没有集群 ,相当于session
3. 生命周期:
-
单例:
scope=“singleton” -
多例:
scope=“prototype” -
init-method:初始化
-
destory-method:销毁
bean 的实例化方式:
1,缺省构造函数方式:
说明:
- 在默认情况下会根据默认缺省构造函数来创建类对象。如果bean中没有默认无参构造函数,将会创建失败。
场景: - 当各个bean的业务逻辑相互比较独立时,或者与外界关联较少时可以使用
2,静态工厂函数方式:
说明:
使用工厂中的静态方法创建对象,并装配到 spring的IOC 容器中。
- id 属性:指定 bean 的 id,用于从容器中获取
- class 属性:指定静态工厂的全限定类名
- factory-method 属性:指定生产对象的静态方法
场景:
- 统一管理各个bean的创建
- 各个bean在创建之前需要相同的初始化处理,则可用静态factory方法进行统一的处理
3,实例化工厂函数方式:
说明:
使用工厂中的实例方法创建对象,并装配到容器中。
- 先把实例工厂做为一个bean装配到 spring容器中。
- 然后再引用工厂bean 来调用里面的非静态方法来获取bean并装配到spring的IOC容器中。
- factory-bean 属性:用于指定实例工厂 bean 的 id。
- factory-method 属性:用于指定实例工厂中创建对象的方法
场景:
- 实例factory方法也作为业务bean控制,可以用于集成其他框架的bean创建管理方法,
- 能够使bean和factory的角色互换
spring的依赖注入(DI):
概述:
DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即(由容器动态的将某个依赖关系注入到组件之中)。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
注入方式:
1. set方法注入:
- bean中必须提供属性的set方法
- 在bean标签中 通过property标签注入属性
- property 指定属性
- name:按属性名
- ref:指定注入bean的Id
2. 构造函数注入:
- bean对象需要有参构造方法
- 在配置文件中通过constructor-arg 标签注入属性
- constructor-arg:构造函数
- name:按属性名
- index:按下标注
- type:按类型
依赖注入的简单配置:
P标签方式(set方法)
p名称空间注入,就是set方法注入。其本质在于简化配置,
bean.xml中添加
空间名: xmlns:p="http://www.springframework.org/schema/p"
C标签方式(构造函数)
c名称空间注入,就是构造函数注入。其本质在于简化配置,
空间名: xmlns:c="http://www.springframework.org/schema/c"
复杂类型注入:
- 使用set方法注入集合属性:
- array:一般用来设置数组
- list:一般用来设置list集合
- map:一般用来设置map集合
- props:一般用来设置properties