BeanPostProcessor
学校小故事
为了了解spring流程,需要接受、了解、熟悉很多未知的定义,在此使用 学校 作为辅助,帮助我们了解spring。
学校 | spring |
---|---|
学校管理局 | spring开发人员 |
学校信息 | ApplicationContext |
学校人员信息库 | DefaultListableBeanFactory |
人员 | bean |
人员信息 | BeanDefinition |
校清洁代理公司 | cglib |
代理公司资质 | BeanPostProcessor |
代理公司I | InstantiationAwareBeanPostProcessor |
代理公司IS | SmartInstantiationAwareBeanPostProcessor |
代理公司M | MergedBeanDefinitionPostProcessor |
代理公司D | DestructionAwareBeanPostProcessor |
bean的创建过程
名词解释 + 概念引入
代理公司
学校中有了校长、老师、学生,可以完成最基础的教学功能。但除了教学功能外,日常打扫卫生,教师信息管理,学生信息管理…这些事情也需要有人完成,校长、老师、学生无法完美完成这些任务,因为他们本身不是做这些工作的。因此这些额外的工作需要第三方公司完成,即代理公司。
代理公司资质
学校不可能接入所有的代理公司,学校只会和 有符合条件的代理公司 合作。此处的符合条件即为 代理公司资质。
代理公司分类
所有具备代理公司资质的 代理公司,也需要分类:代理公司I、代理公司IS、代理公司M、代理公司D。
举例:擅长打扫操场卫生的代理公司 应当被分配去 打扫操场卫生,不应该分配到 管理教师,这属于 驴头配不上马嘴。需要按劳分配。
小结
概念引入中的小故事就是spring中创建bean流程,不过缺少了亿丢丢细节。
BeanPostProcessor
接口中声明 初始化前、后两个方法。
InstantiationAwareBeanPostProcessor
接口中声明 实例化前、后 + bean属性增强方法
SmartInstantiationAwareBeanPostProcessor
接口中声明 猜测bean类型、确认beanName的构造方法、获取提前暴露的实例化bean方法
MergedBeanDefinitionPostProcessor
接口中声明 指定BeanDefinition信息增强、指定bean的定义信息重置<后续处理器清除影响bean的元数据>方法
DestructionAwareBeanPostProcessor
接口中声明 bean销毁前执行方法、检查当前bean是否应该被销毁 方法