spring中的BeanFactoryPostProcessor

学校小故事

为了了解spring流程,需要接受、了解、熟悉很多未知的定义,在此使用 学校 作为辅助,帮助我们了解spring。
<此版本中 新增BeanFactoryPostProcessor>

学校spring
学校管理局spring开发人员
学校信息ApplicationContext
学校人员信息库DefaultListableBeanFactory
校内人员信息Map<name,BeanDefinitionMap> BeanDefinitionMap
校内人员名称BeanDefinitionNames
第三方服务公司<非学生信息服务>BeanFactoryPostProcessor
第三方服务公司<学生信息服务>BeanDefinitionRegistryPostProcessor
人员bean
人员信息BeanDefinition

学校开学

学校开学了,学生家长、老师提供很多重复信息和可能存在的未知异常信息。

故事引申<需求出现>

问题1:学校可能收到未知异常信息。
学校:这个 A学生的信息提供有问题,今年就别让他上学了。
学生家长:不行,你的规范太繁琐了,这不怪我。
学校管理处:这是学校的问题,学校想办法解决。
第三方服务公司<BeanDefinitionRegistryPostProcessor类>:这个我可以解决,我来扫描片区内的学生,完成信息注册。

问题2:学校可能收到日期格式字符串
java中虽然字符串占较大多数,但是不意味每个对象中的所有属性都是简单数据类型,这种情况下,需要属性转换器进行格式转换。

需求问题解决

spring的十三太保之五invokeBeanFactoryPostProcessors解决。

委托第三方公司简介

所有实现 BeanFactoryPostProcessor接口类 都可以任务是 第三方服务公司<BeanFactoryPostProcessor类>

第三方服务公司<非学生信息服务>
BeanFactoryPostProcessor{
    # 对BeanFactory进行自定义处理
    postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
}
第三方服务公司<学生信息服务>
BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {
    # 对BeanFactory中的BeanDefinition进行自定义处理
    void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
}

将第三方公司信息注册到 BeanFactory中

存在两种注册方式:
1、通过xml文件或注解正常注册到校内人员信息<BeanDefinitionMap参数>;
2、重写十三太保之四<postProcessBeanFactory方法>手动注册到校内人员信息<BeanDefinitionMap参数>。

第三方公司工作位置

spring十三太保之五<invokeBeanFactoryPostProcessors方法>

spring十三太保之五 的工作内容

执行BeanDefinition中的 BeanFactoryPostProcessor和 十三太保之四<postProcessBeanFactory方法>手动注册的BeanFactoryPostProcessor。

spring十三太保之五 的工作流程

1、执行 所有BeanDefinitionRegistryPostProcessor的 postProcessBeanDefinitionRegistry 方法,按照 4 的顺序依次执行。
2、执行 十三太保之四<postProcessBeanFactory方法>手动注册的BeanFactoryPostProcessor的postProcessBeanFactory方法,按照 4 的顺序依次执行。
3、执行 BeanDefinition中的BeanFactoryPostProcessor的postProcessBeanFactory方法,按照 4 的顺序依次执行。
4、BeanFactoryPostProcessor中存在执行顺序优先级<@PriorityOrdered,@Order,没有注解的>。

PostProcessorRegistrationDelegate类中的
invokeBeanFactoryPostProcessors方法
56行~185行,整体逻辑就是上述逻辑

BFPP的BeanDefinition扫描器

扫描器之@Component: 自动扫描流程

扫描器之@Import: 自动装配流程

BFPP的属性编辑器

属性编辑器: 属性编辑器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值