- Spring概念
Spring最常用的有如下三种 我们详细说下第一种 spring framework中又包含了许多
Spring Framework
-
core container 核心容器
-
AOP 面向切面编程
-
Aspects AOP思想实现
-
Date Acess 数据访问
-
Date Integration数据集成
-
Web web开发
-
Test 单元测试 集成测试
Spring Boot
Spring cloud
- Spring引入带来了哪些好处?
- 解耦 我们知道在实际业务开发中 耦合度越低越好 这样当程序有一处需要修改 就可以减少修改的地方 减少bug出现 所以在Spring中 通过 IOC 容器,将对象之间的依赖关系交给 Spring 来管理,降低了对象之间的耦合度。
- AOP编程支持:提供了面向切面编程的支持,方便处理一些具有横切性质的系统级服务,如事务管理、日志记录等。
- 易于测试:junit4 测试比较高效 而Spring 对 JUnit4 提供了良好的支持 所以使得编写单元测试和集成测试变得非常简单。
- 简化开发 在spring中提供了许多高效成熟的框架 所以能帮助省去繁琐的步骤
- 什么是AOP?
AOP 是一种编程范式,允许开发者定义横切关注点,这些关注点会跨越多个对象和方法。
在 Spring 中,AOP 主要用于实现日志记录、事务管理、安全控制等。
- 什么是IOC?(控制反转 )
使用对象时不主动使用new产生对象 转换为由外部提供对象
对象的创建控制权由程序转移到外部 这种思想称为控制反转
创建控制权转移->控制反转
IoC容器 (Spring提供)
步骤
- 导入Spring坐标
- 定义Spring管理的类(接口)
- 创建spring配置文件 配置对应类作为Spring管理的bean
- 初始化ioc容器 通过容器获取bean
- 什么是Bean?
IOC容器 中
负责对象的创建 初始化等一系列工作 被创建或被管理的对象在Ioc容器统称为Bean
- Bean是如何创建的?实例化bean的三种方式是什么?
- 使用默认构造函数:Spring 默认使用无参构造函数来创建 Bean 实例。
bean本质就是对象 创建bean对象使用构造方法 默认调用无参构造方法 如果没有就会报错
- 使用静态工厂方法:通过在配置文件中指定静态工厂方法来创建 Bean。
在bean标签里面 class填写工厂类 添加 factory-method 等于 工程类中获取对象的方法
静态工厂:与通过new
关键字直接调用构造函数创建对象的方式不同,静态工厂是通过调用一个类的静态方法来获取该类的实例。
- 使用实例工厂方法:通过在配置文件中指定实例工厂方法来创建 Bean。
实例工厂:指工厂提供的方法服务是非static的,即需要自己创建工厂对象,然后通过这个工厂对象去调用其中的方法或服务。
首先 在bean中创造工厂的对象造出来 然后再写一个bean 添加factory-bean属性 添加factory-method属性
改良:创建一个工厂bean类 implements FactoryBean接口 泛型中填入对象类型 实现接口函数 如果想控制对象是否单例 可以添加 isSingleton方法
bean 配置
在标签bean中 name起别名 可以起多个别名 允许使用分号或空格隔开
别名在 getbean(中可以使用 ) ref中也可以使用 等等 别名范围很大
bean的作用范围 Spring默认创建对象为单例对象 需要添加属性 scope 为prototype (如此创建多个对象不为单个)
- 普通对象怎么才能变成bean?
首先你需要一个类
然后在Spring的配置文件中使用<bean>标签配置对象
如果需要的话 还需要添加<property>标签配置属性
例如 在<property>中 name属性表示配置哪一个具体的属性 ref表示参照哪一个bean
- 描述一下Bean生命周期
bean从创建到销毁的过程
bean标签 添加 init-method属性 destroy-method属性(需要关闭容器才能启动该方法 一般设置关闭钩子 registerShutdownHook 即关闭虚拟机关闭之前 自动关闭容器)
或者添加初始化销毁接口 InitializingBean DisposableBean 实现对应方法
所以bean生命周期过程可以分为
- 初始化容器
- 创建对象(分配内存)
- 执行构造方法
- 执行属性注入
- 执行bean初始化方法
- 使用bean
- 执行业务操作
- 关闭容器
- 执行bean销毁方法
- 依赖注入
DI 在容器中建立bean与bean之间的依赖关系的整个过程 称为依赖注入
- setter注入
- 引用类型
在bean中定义引用类型属性并提供可供访问的set方法 配置中使用property标签ref属性注入引用类型对象
- 简单类型
在bean中定义引用类型属性并提供可访问的set方法 配置中使用propertity标签value属性注入简单类型数据
- 构造器注入(Spring框架倡导使用 相对严谨)
简单类型 constructor-arg 标签 name属性 value属性 name为形参名称
引用类型 constructor-arg 标签 name属性 ref属性 注意name为形参名称
以上为标准书写 耦合度较高
避免较高耦合度 name 可以使用 type属性 解决形参名称问题 但是多个形参需要区分类型
所以可以使用 index属性 确定第几个参数 解决参数类型重复问题使用位置解决参数匹配
- 自动装配
bean标签添加 autowire属性
适用于引用类型 不能对简单类型进行操作
方式
按类型 byType (主要使用) 必须保证容器中相同类型的bean唯一
按名称 byName 必须保障容器中具有指定名称的bean 具有耦合性
按构造方法 不推荐
- 集合注入
数组对象
<property name="array">
<array>
<value> </value>
</array>
</property>
List对象
<property name="list">
<list>
<value> </value>
</list>
</property>
properties对象
<property name="properties">
<props>
<prop key=""> </prop>
</props>
</property>
map对象
<property name="map">
<map>
<entry key="" value=""/>
</map>
</property>