IOC:控制反转,把创建对象的过程交给spring进行管理
AOP: 面向切面,不修改源代码进行功能添加
一、IOC容器
1、什么是IOC(控制反转)
把对象创建和对象之间的调用过程,交给Spring进行管理
使用IOC目的:降低耦合度
2、IOC底层
xml解析、工厂模式、反射
3、IOC(BeanFactory 接口)
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
4、Spring提供的IOC容器实现的两种方式(两个接口)
a)BeanFactory接口:IOC容器基本实现是Spring内部接口的使用接口,不提供给开发人员进行使用(加载配置文件时候不会创建对象,在获取对象时才会创建对象。)
b)ApplicationContext接口:BeanFactory接口的子接口,提供更多更强大的功能,提供给开发人员使用(加载配置文件时候就会把在配置文件对象进行创建)推荐使用!ApplicationContext有实现类
5、Spring 有两种类型 bean,一种普通 bean,另外一种工厂 bean(FactoryBean)
普通 bean:在配置文件中定义 bean 类型就是返回类型
工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样
第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean
第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型
二、spring对bean的管理
1 Bean 管理
1)什么是 Bean 管理
Bean 管理指的是两个操作
(1)Spring 创建对象
(2)Spirng 注入属性
2)Bean 管理操作有两种方式
(1)基于 xml 配置文件方式实现
(2)基于注解方式实现
1.1 创建bean的三种方式
1)使用默认构造函数
在spring配置文件中使用bean标签,只有id和class属性,且没有其他标签时,采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。
2)使用普通工厂(某个类)中的方法创建对象
<bean id="" factory-bean="" factory-method=""></bean>
<bean id class factory-method></bean>
3)使用工厂中(某个类)的静态方法创建对象
1.2 bean 对象的作用范围
设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象
设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用getBean 方法时候创建多实例对象
1.3 bean 对象生命周期
1)生命周期
从对象创建到对象销毁的过程
2)bean 生命周期
(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)把 bean 实例传递 bean 后置处理器的方法
(4)调用 bean 的初始化的方法(需要配置初始化的方法)
(5)把 bean 实例传递 bean 后置处理器的方法
(6)bean 可以使用了(对象获取到了)
(7)当容器关闭时候,调用 bean 的销毁的方法(需要配置销毁的方法)
3)
单例对象
出生 当容器创建时,对象出生
活着 只要容器还在,对象就活着
死亡 容器销毁,对象死亡
总结 单例对象的生命周期和容器相同
多例对象
出生 当使用对象时,由spring创建
活着 使用过程中一直活着
死亡 Java垃圾回收机制
2 依赖注入(IOC的一种实现方式)(Dependency Injection)
依赖关系的管理:以后都交给spring来维护
在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明
依赖关系的维护就称为依赖注入。
2.1 能注入的数据:有三类
- 基本类型和String
- 其他bean类型(在配置文件中或者注解配置过的bean)
- 复杂类型/集合类型
2.2 注入的方式:有三种
- 使用构造函数提供
- 使用set方法提供
- 使用注解提供