一、Spring概述
- Spring是开源的对bean的生命周期进行管理的轻量级容器。
- Spring有两个核心部分:IOC和AOP
IOC:控制反转,把对象的创建交给Spring进行管理
AOP:面向切面,不改变源代码进行功能增强 - Spring特点
(1)方便解耦,简化开发
(2)AOP编程支持
(3)方便程序测试
(4)方便和其它框架的整合
(5)方便进行事务的操作 - Spring组成模块
二、IOC底层原理
- 主要用到xml解析、工厂设计模式、反射
- IOC容器底层就是对象工厂
- Spring提供IOC容器的两种实现方式:
BeanFactory:IOC容器最基本的实现,是Spring内置的使用接口,不提供给开发人员使用
*加载配置文件时不会去创建对象,在获取对象(使用)时才会去创建对象
ApplicationContext:是BeanFactory的子接口,提供了更多更强大的功能,提供给开发人员使用
*加载配置文件时就会将配置文件中配置的对象进行创建 - ApplicationContext两个实现类
FileSystemXmlApplicationContext:对应的xml文件路径为盘符路径
ClassPathXmlApplicationContext:对应的xml文件路径为类文件路径
三、bean管理
bean管理指:Spring创建对象、Spring注入属性
bean管理的两种实现方式:基于xml配置文件、基于注解
四、bean管理-基于xml配置文件
-
基于xml创建对象
(1)在Spring配置文件中,使用bean标签,配置相应的属性,就可以实现对象的创建
id属性:对象唯一标识
class属性:对象所属类的全路径
(2)创建对象时,默认调用的是无参构造来创建对象- 基于xml方式注入属性
(1)DI:依赖注入,就是注入属性
set方法注入:
有参构造注入:
(2)字面量
(3)注入属性-外部bean
(4)注入属性-内部bean
(5)注入属性-集合
- 基于xml方式注入属性
-
bean的作用域:
(1)在Spring中可以设置创建bean实例时单实例还是多实例
(2)在Spring中默认是单实例
(3)在Spring配置文件的bean标签中,属性scope用于设置单实例还是多实例
(4)scope属性值
singleton:默认值,单实例
prototype:多实例
(5)singleton和prototype区别
singleton表示单实例,prototype表示多实例;
singleton会在加载配置文件的时候就去创建对象,prototype不会在加载配置文件的时候创建对象,会在调用get’Bean方法的时候创建对象 -
bean的生命周期
(1)通过构造器创建bean实例(无参构造)
(2)为bean属性设置值(调用set方法)
(3)调用bean的初始化方法(需要进行配置)
(4)获取bean实例getBean
(5)当容器关闭时,调用销毁实例的方法销毁bean实例(需要进行配置) -
添加bean的后置处理器
(1)创建类,实现BeanPostProcesser接口,创建后置处理器
(2)xml配置文件配置后置处理器
-
添加bean的后置处理器后,bean的生命周期
(1)通过构造器创建bean实例(无参构造)
(2)为bean属性设置值(调用set方法)
(3)将bean实例传递给bean的后置处理器的postProcessBeforeInitialization方法
(4)调用bean的初始化方法(需要进行配置)
(5)将bean实例传递给bean的后置处理器的postProcessAfterInitialization方法
(6)获取bean实例getBean
(7)当容器关闭时,调用销毁实例的方法销毁bean实例(需要进行配置) -
bean管理-自动装配
(1)什么是自动装配:根据指定自动装配规则(属性名称或者属性类型),Spring自动匹配属性进行注入
(2)通过配置xml配置文件中bean标签中的autowire属性实现自动注入:
byName:通过名称注入,注意类属性名称,要与xml文件中的bean的id一致
byType:通过类型注入,注意相同类型的bean不能存在多个 -
外部属性文件
(1)创建数据库连接池(直接配置)
(2)创建数据库连接池(外部properties配置文件)
引入context名称空间
引入外部properties配置文件:
五、bean管理-基于注解
- 什么是注解:
(1)注解是代码特殊标记,格式:@注解名称(属性名=属性值)
(2)注解可以作用在类、方法、属性上
(3)使用目的:简化xml配置 - Spring针对bean管理中创建对象的注解
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository - 基于注解方式创建对象
(1)引入aop依赖包
(2)开启组件扫描
- 基于注解方式属性注入
(1)@AutoWired:根据属性类型自动注入
(2)@Qualifier:根据属性名称自动注入,需要与@AutoWired一起使用,为了解决一个接口存在多个实现类的情况
(3)@Resource(本身不属于Spring,属于javax):可以根据属性类型或者属性名称自动注入,添加name属性时使用名称注入,否则适用类型注入
(4)@Value:注入普通类型属性
5.完全注解开发
(1)创建配置类代替xml配置文件
(2)加载配置类