Listener listener = (Listener) FrameInvoker.getBean(clazz);
在要执行监听器时,一直获取不到对象,很疑惑,打印执行
String[] names = applicationContext.getBeanNamesForType(Listener.class); System.out.println(Arrays.toString(names)); Class<?> clazz = ClassUtil.getClazz("com.ruoyi.office.listener.GradeLeaderLeaveStartListener"); Object bean = FrameInvoker.getBean(GradeLeaderLeaveStartListener.class); Listener listener = (Listener)FrameInvoker.getBean(clazz); System.out.println(clazz.getMethods()); System.out.println(listener); System.out.println("FrameInvoker取到的Bean = " + bean);
一直取不到listener的值,但监听器对象已经成功注入容器了。那就是上下文加载的问题,排查良久发现 业务系统和热加载器不是同一个(热部署插件导致)
热部署插件jrebel或者devtools导致的问题,检查是否使用热部署插件,比如spring.devtools,加上配置spring-devtools.properties
restart.include.flow=/org.dromara.warm.*.jar
即可解决问题,该常见问题在官方亦有记载
https://warm-flow.dromara.org/master/other/troubleshooting.html#_3%E3%80%81initflow-%E6%9C%AA%E5%8A%A0%E8%BD%BD
排查良久,看了N多底层代码,才发现问题 心有不甘,特意记载