spring 的理解
- spring 是一个基础的框架,同时提高了一个Bean 的容器,用来装载Bean对象
- spring会帮我们创建Bean 对象并维护Bean对象 的生命周期。
- 在spring 框架上,还有springCloud,spring Boot 的技术框架,都是以Spring为基石的
- spring 有两个核心,就是IOC和AOP
Spring IOC 是什么?
- 控制反转,将对象和对象的关系由spring 统一管理,而这些对象统称 Bean
- IOC本质上就是一个对象工厂:使用时需要将bean实例化,
Spring提供了IOC容器的两种实现方式:
① BeanFactory接口:是面向Spring本身的,不是提供给开发人员使用的
② ApplicationContext接口:BeanFactory的子接口,面向开发人员使用
Spring AOP 是什么?
- 面向切面编程
- 我们可以将一些与业务逻辑无关的代码,来通过切面来实现,比如:日志,权限控制,事务管理,接口限制
- 在使用中,我们需要实现前置方法,后置方法,通知等
IOC 容器是怎么实现的?
-
配置Bean
通过xml或者是@Component @Bean 等进行配置 -
解析Bean,得到BeanDefinition定义对象
通过 BeanDefintionReader 将 bean 进行解析,准备要创建的bean对象的定义对象BeanDefinition,存放到BeanDefintionMap 中,将beanName和bean值进行保存 -
实例化bean
BeanFactory通过反射的方式j将BeanDefinition定义对象实例化成具体的bean对象
注意:在这之前也可以进行beanFactoryPostProcessor(Bean的增强器)的处理,我们可以根据获取到的BeanDefinition 定义对象做特殊处理 -
初始化Bean
(1)填充属性: 通过populateBean 填充属性
(2)执行aware 接口所实现的方法:方便通过bean对象来获取容器中的属性值
(3)调用BeanPostProcessor前置处理方法:AOP等都在这里实现
(4)调用init-mehtod方法
(5)调用BeanPostProcessor的后置处理方法 -
生成Bean
通过getBean方法可以直接获取 -
销毁Bean
Bean 的生命周期
1 实例化bean: BeanFactory通过反射的方式j将BeanDefinition定义对象实例化成具体的bean对象
2. 填充属性: 通过populateBean 填充属性
3. 执行aware 接口所实现的方法:方便通过bean对象来获取容器中的属性值
4. 调用BeanPostProcessor前置处理方法:
5. 调用 init-mehtod方法
6.调用BeanPostProcessor的后置处理方法:AOP等都在这里实现
7. 通过getBean 来获取Bean
8. x销毁Bean
扩展
Spring是如何简化开发的?
- 通过依赖注入和面向接口实现松耦合
- 基于切面和惯例进行声明式编程
- 通过切面和模板减少样板式代码
Spring IOC的实现机制
- 简单工厂
- 反射
什么是Bean,什么是对象
- 由Spring 管理的对象叫 Bean
- bean 一定时对象,对象不一定是Bean