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

spring使用@PostConstruct踩得坑

情况说明: 在一个抽象类中使用@PostConstruct注解方法init用于初始化操作。然后每个实现类在初始化时都会调用@PostConstruct注解的init方法执行初始化操作。如下代码:

public abstract class AbstractClass {/*** 存放各实例.*/public static final Map<Integer, AbstractClass > INSTANCES = new ConcurrentHashMap<>();protected abstract void doSomething();/*** 初始化操作.*/@PostConstructvoid init() {INSTANCES.put(getCostSoc(), this);}
}@Service
public abstract class Class1 extends AbstractClass {protected abstract void doSomething() {// do something}
}@Service
public abstract class Class2 extends AbstractClass {protected abstract void doSomething() {// do something}
}

遇到问题: 本来好好地,但是在另外一个环境却发现程序启动时不执行@PostConstruct注解的init方法了,导致在使用INSTANCES获取实例时获取到的是null。进而导致后面业务走不下去。

原因分析: 经过分析最终得出的结论是,这个环境不知道怎么配了默认懒加载,
而懒加载情况下,在程序启动时是不会执行@PostConstruct注解的方法的。

解决问题: 经过尝试有两种方式可以解决这种问题。
1. 配置@Lazy(false)取消懒加载,如下:

@Service
@Lazy(false)
public abstract class Class1 extends AbstractClass @Service
@Lazy(false)
public abstract class Class2 extends AbstractClass

2. 在另一个bean BizService中依赖AbstractClass,这样在BizService实例化时需要先实例化依赖的bean,进而触发AbstractClass的实例化,进而执行@PostConstruct注解的方法。如下:

@Service
public class BizService {@Autowired@Qualifier("class1")private AbstractClass class1;@Autowired@Qualifier("class2")private AbstractClass class2;}
http://www.lryc.cn/news/383306.html

相关文章:

  • 【Mac】XnViewMP for Mac(图片浏览查看器)及同类型软件介绍
  • win10修改远程桌面端口,Windows 10下修改远程桌面端口及服务器关闭445端口的操作指南
  • 口感探险之旅:勇闯红酒世界,揭秘复杂风味的无尽奥秘
  • 吉时利 Keithley2440 数字源表
  • PPT的精细化优化与提升策略
  • awtk踩坑记录三:移植awtk-mvvm到Awtk Designer项目
  • 07 - matlab m_map地学绘图工具基础函数 - 绘制等高线
  • Kotlin设计模式:享元模式(Flyweight Pattern)
  • java压缩pdf
  • [AIGC] ClickHouse:一款高性能列式数据库管理系统
  • 深度学习21-30
  • google浏览器无法访问大端口的处理方式
  • 微信小程序余额退费
  • 宁波银行票据案例解读,要注入科技赋能票据新形式
  • 博客已迁移
  • 大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama等)
  • 24年嘉兴市索贝进出口有限公司--信息安全实施项目
  • 亚马逊云科技官方活动:一个月拿下助理架构师SAA+云从业者考试认证(送半价折扣券)
  • 【山东】2024年夏季高考文化成绩一分一段表
  • 栈与队列 Leetcode 347 前k个高频元素
  • windchill 相关配置
  • XGBoost算法深度解析:原理、实现与应用
  • 27-29、redis优化(令牌主动失效机制)-controllert额外添加参数接收请求头、拦截器
  • 【Linux】性能分析器 gperftools 详解
  • C语言基础——函数(2)
  • Kafka Stream 流处理设计概述
  • Centos7安装自动化运维Ansible
  • element-ui 下拉菜单el-dropdown-item添加点击事件
  • Day45
  • 新媒体矩阵系统是什么?怎么搭建矩阵系统?