IOC
简单说
- 准备Spring的上下文环境ApplicationContext
- 扫描XML文件和注解, 得到一系列Bean的定义
- 根据Bean进行实例化, 依赖注入
- 把Bean放到容器Map里面
详细说
- 准备Spring的上下文环境
- 比如XMLWebApplicationContext、AnnotationConfigApplicationContext, 准备去扫描XML文件和注解
- 这些就是ApplicationContext底层主要接口是BeanFactory, 这个工程是生成Bean的核心接口
- 扫描XML文件和注解
- 得到一个个BeanDefinition对象, 得到得是Bean的定义, 比如得到Bean的类、依赖关系、属性
- 根据Bean进行实例化, 依赖注入
- Spring的ApplicationContext先生成一个DefaultListableBeanFactory的Bean工厂, Bean工厂基于BeanDefination创建Bean, 只生成单例模式的Bean, 不会生成原型Bean
- 生成Bean的过程主要分: 实例化一个Bean、完成依赖注入把Bean之前的关系补起
- 把Bean放到容器Map里面
AOP
底层原理: 动态代理
针对普通类: 通过CGLib
针对实现接口的类: 使用Java原生动态代理来实现的, 由于Java原生动态代理的局限性
-- 只能通过继承Proxy类才能实现动态代理, 而Java又是单继承模式的, 这个类假如继承了别的类就不能使用Java原生动态代理实现了
生命周期
- 准备Spring的上下文环境
- 比如XMLWebApplicationContext、AnnotationConfigApplicationContext, 准备去扫描XML文件和注解
- 扫描XML文件和注解
- 得到一个个BeanDefinition对象, 得到得是Bean的定义, 比如得到Bean的类、依赖关系、属性
- BeanFactory后置处理
- 调用BeanFactoryPostProcessor后置处理器, 对BeanDefinition要做一些处理, 对一些属性进行设置、替换
- Bean的实例化
- 采用反射机制把Bean对象创建出来
- Bean的初始化
- 对Bean的依赖关系进行属性的注入
- Bean的后置处理
- 调用BeanPostProcessor后置处理器, 对Bean进行后置处理, 比如AOP的操作, 对类进行切面增强
- 放入Bean容器
- Bean销毁
- 当SpringApplicationContext要关闭的时候对Bean进行销毁, 主要调用DisposableBeanFactory销毁Bean工厂、或者Bean的destroy方法