AOP,Bean以及Bean的生命周期

AOP,Bean以及Bean的生命周期
赵海波Spring中的基本概念
什么是Spring Bean
Bean就相当于定义一个组件,这个组件是用于具体实现某个功能的。
在Spring文档的官方解释是:在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 bean。bean 是由Spring IoC 容器实例化、组装和管理的对象。
简单说明一下就是:
- bean 是对象,一个或者多个不限定
- bean 由 Spring 中一个叫 IoC 的东西管理的
- 我们的应用程序由一个个 bean 构成
- Bean就是Spring当中的最小执行单位
什么是IOC
IOC(Inversion of Control,控制反转)Spring IOC它的主要作用是将对象的创建和依赖关系的管理交给 Spring 容器来处理,而不是在代码中手动创建和管理对象。
控制反转通过依赖注入(DI)方式实现对象之间的松耦合关系。程序运行时,依赖对象由辅助程序动态生成并注入到被依赖对象中,动态绑定两者的使用关系。Spring IoC 容器就是这样的辅助程序,它负责对象的生成和依赖的注入,然后再交由我们使用。
通过这种方式,Spring IOC 实现了松耦合设计,使得代码更易于维护和测试。你可以简单地理解为,Spring IOC 容器就像一个“中介”,它负责根据你的需求提供合适的对象,并管理它们的依赖关系和生命周期。
什么是AOP
aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做为公共日志保存,事务处理等
Bean的生命周期
Spring Bean的生命周期是指Bean在Spring容器中从创建到销毁的整个过程。该过程由Spring IOC容器进行管理。
可以分为三个过程:生产,使用以及销毁
1.生产Bean:
1.加载Bean定义
通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中
2.创建Bean对象
通过 createBean 遍历 beanDefinitionMap 创建bean
2.1.构建对象
- 容器通过 createBeanInstance 进行对象构造
- 获取构造方法:@Autowired
- 准备参数 根据类查找>参数名查找
- 构造对象
- 无参对象直接实例化
2.2.填充属性
通过populateBean方法为Bean内部所需的属性进行赋值
- 通常是 @Autowired 注解的变量
2.3初始化Bean对象
通过initializeBean对填充后的实例进行初始化
2.3.1填充初始化容器相关信息
通过 invokeAwareMethods 方法:为实现aware接口【信息感知接口】的Bean 设置注入beanName、beanFactory等容器信息
2.3.2初始化构造方法
通过 invokeInitMethods 方法进行初始化:
如果Bean实现InitializingBean接口进行处理【未实现则不进行】
- afterPropertiesSet方法【bean填充属性后执行】
- initMethod 方法
2.3.3Bean的后置处理
在invokeInitMethods 的前后进行
- applyBeanPostProcessorsBeforeInitialization
- invokeInitMethods
- applyBeanPostProcessorsAfterInitialization
在后置处理中处理了包括:AOP【AnnotationAwareAspectJAutoProxyCreator】
负责 构造后@PostConstruct 和 销毁前@PreDestroy 的 InitDestoryAnnotationBeanPostProcessor 等
2.3.4注册销毁
通过reigsterDisposableBean处理实现了DisposableBean接口的Bean的注册
3.添加到单例池
通过 addSingleton 方法,将Bean 加入到单例池 singleObjects
4.销毁
4.1.销毁前
调用 bean中@PreDestory 注解的方法
通过 postProcessBeforeDestruction 方法调用destoryBean逐一销毁Bean
4.2.销毁
调用 destoryBeans
4.3.执行客户自定义销毁
调用 invokeCustomDestoryMethod
最后使用addSingleton将生成的Bean放入单例池singletonObjects中就可以被获取以及使用







