当前位置: 首页 > news >正文

利用BeanFactoryPostProcessor让Bean提前被创建

起因是bean的一些初始化方法里面,查询数据的时话,用到了Spring的一些Bean,采用的是静态调用。而这些bean还没有被始始化出来。导致空指针异常。需要提前把这部份bean创建好。虽然下面提出的解决方法能解决该问题。但仍然是不推荐的调用。不符合Spring正常的注入规则。而且此处没法用Depends之类的来处理

在某个InitializingBean的初始化方法中,调用了如下静态方法,导致不能正确的获取到SecretWrapperEnhancer对象,改造后如下:

@Overridepublic void afterPropertiesSet() {...//间接调用了SecretWrapperEnhancers.enhanceSecretWrapper...}publi
c class SecretWrapperEnhancers {private static List<SecretWrapperEnhancer> enhancers;public static void setEnhancers(List<SecretWrapperEnhancer> enhancers) {SecretWrapperEnhancers.enhancers = enhancers;}public static void enhanceSecretWrapper(SecretWrapper secretWrapper) {if (ZYListUtils.isEmptyList(enhancers)) {return;}// 旧有做法得到的是空的: List<SecretWrapperEnhancer> enhancers=SpringContextHolder.getBeans(SecretWrapperEnhancer.class);for (SecretWrapperEnhancer enhancer : enhancers) {if (enhancer.supportClass(secretWrapper.getModelClass())) {List<SecretModel> secretModels = enhancer.loadEnhanceModel(secretWrapper);secretWrapper.enhance(secretModels);}}}
}

只需要在postProcessBeanFactory中提前获取bean并设置即可,将bean的构建提到靠前的位置

public class PrepareCompleteAboutBeanProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {Map<String, SecretWrapperEnhancer> beansOfType = beanFactory.getBeansOfType(SecretWrapperEnhancer.class);Collection<SecretWrapperEnhancer> values = beansOfType.values();SecretWrapperEnhancers.setEnhancers(new ArrayList<>(values));}
}

相关文章:

  • 汽车IVI中控开发入门及进阶(二十四):杰发科技AC8015
  • 高通Android 12/13实现USB拔出关机功能
  • 了解CSS中的link和@import引入CSS的区别
  • Linux搭建PHP下的RabbitMQ环境(php-amqp/rabbitmq-c/erlang)
  • 如何管理和维护组件库?
  • WPF实现简单的3D图形
  • Android ViewPager和ViewPager2的区别
  • jenkins插件之plot
  • TypeScript 在前端开发中的应用
  • 品牌舆情监测系统是什么?怎么监测?
  • Hbase 面试题(七)
  • PDF编辑流程,另附5款好用的PDF编辑器
  • 2024.5.29晚训参考代码
  • 解析《动物园规则怪谈》【逻辑】
  • ffmpeg.dll在哪个文件夹?怎么快速的修复ffmpeg.dll文件的丢失
  • #Java异常处理
  • 【mysql】环境安装、服务启动、密码设置
  • 2019年如何成为全栈工程师?
  • CAP理论的例子讲解
  • es6(二):字符串的扩展
  • FastReport在线报表设计器工作原理
  • JavaScript 奇技淫巧
  • js中的正则表达式入门
  • laravel with 查询列表限制条数
  • Leetcode 27 Remove Element
  • ng6--错误信息小结(持续更新)
  • Spring声明式事务管理之一:五大属性分析
  • 手写双向链表LinkedList的几个常用功能
  • 说说动画卡顿的解决方案
  • 学习ES6 变量的解构赋值
  • 正则与JS中的正则
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​Java基础复习笔记 第16章:网络编程
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #、%和$符号在OGNL表达式中经常出现
  • #NOIP 2014# day.2 T2 寻找道路
  • (12)Hive调优——count distinct去重优化
  • (2)leetcode 234.回文链表 141.环形链表
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (二)JAVA使用POI操作excel
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十六)Flask之蓝图
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (五)c52学习之旅-静态数码管
  • (转)3D模板阴影原理
  • .gitignore
  • .Net 8.0 新的变化
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net Core 笔试1
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 验证控件和javaScript的冲突问题
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .NetCore项目nginx发布