Spring启动过程中创建bean过程中BeanDefinition的后置处理部分的代码分析
2023-02-18 16:35:15 时间
意义
1.这部分的代码看似很简洁,但是却便于扩展,而且对于增加功能也不用改动主体代码(策略模式,也是为什么要用设计模式的原因)
2.其次是为什么要有这一步,这一步针对的是 BeanDefinition 的处理,正如我们经常在类加上一些依赖注入或者其他的注解(这里便是为了让把这些注解封装成对象,塞入到BeanDefinition 中,在初始化的时候直接拿出用即可)
代码展示
// 后置处理合并后的BeanDefinition synchronized (mbd.postProcessingLock) { if (!mbd.postProcessed) { try { //执行BeanDefinitionPostProcessor applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName); } catch (Throwable ex) { throw new BeanCreationException(mbd.getResourceDescription(), beanName, "Post-processing of merged bean definition failed", ex); } mbd.postProcessed = true; } } //通过缓存中拿出对应类型的PostProcessor对bean进行处理 protected void applyMergedBeanDefinitionPostProcessors(RootBeanDefinition mbd, Class<?> beanType, String beanName) { for (MergedBeanDefinitionPostProcessor processor : getBeanPostProcessorCache().mergedDefinition) { processor.postProcessMergedBeanDefinition(mbd, beanType, beanName); } }
代码说明
如postProcessMergedBeanDefinition方法在不同类中处理的东西不同
CommonAnnotationBeanPostProcessor类(扫描@PostConstruct @PreDestroy,扫描@Resource,扫描属性和方法上面是否有@Resource注解,如果有则收集起来封装成对象)
AutowiredAnnotationBeanPostProcessor类(扫描@Autowired,如果有则收集起来封装成对象)
相关文章
- 通用用户权限管理系统组件V3.8功能改进说明 - 审批流程菜单的隐藏
- 权限系统 - 用户访问安全之IP限制
- 通用用户权限管理系统组件V3.8功能改进说明 - 菜单权限的修正
- 通用用户权限管理系统组件V3.8功能改进说明 - 对用户表BaseUser的拆分优化
- 程序员该做的事 - 每天、每周、每月
- 优化杭州某著名电子商务网站高并发千万级大型数据库经验之- SQL语句优化
- 优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 读写分离
- 优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 内存性能
- 优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 磁盘I/O性能
- 参与投标某单位软件项目经历分享(软件招标:浙江杭州、项目金额:40-50万)
- 给浙江杭州某猎头公司开发猎头行业软件.NET接口的经验小结分享
- 网站同样是1000次访问程序测试,但是分100个线程、每个线程100次循环来测试程序的大并发压力会更靠谱
- C#.NET 权限管理系统组件 - 大数据读写分离实现的例子
- C#.NET 权限管理系统组件 - 大数据只获取更新部分数据列的标准例子
- ASP.NET权限组件,生成10万条测试数据检测程序的大数据性能改进
- C# ASP.NET 通用权限管理系统组件的数据访问层的调用方法参考2 - 多种类型的多数据库连接方法
- C# ASP.NET 通用权限管理系统组件的数据访问层的调用方法参考1 - 基本功能
- 【转载★架构】百万级访问量网站的技术准备工作
- 软件合作开发:2012年年底给苏州工业园区某家软件企业实施C#.NET软件开发系统框架的经验小结
- C# CharacterToBinary 将类似2进制字符串 10010110111 转换为数值型源码