因此,我遇到了这个问题,我什至没有意识到可能会发生。 到目前为止,我的理解是JVM通过类名,程序包名和类加载器名的组合来识别类。我已经验证了所有这3个都匹配,但仍然收到ClassCastException。
@Component
public class SomeBean(){
//this is my service
}
我可以使用我的类中的spring autowired成功地将其注入,将其注入到Quartz Scheduler的上下文中,如下所示:
scheduler.getContext().put("Key",SomeBeanInstance);
我试图在Quartz Job的execute方法中获取该bean,大致如下:
SomeBean someBeanInstance = (SomeBean) schedulerContext.get("key");
这给了我类强制转换异常:
cannot cast a.b.SomeBean to a.b.SomeBean
。我在注入someBean的类和Quartz作业上都验证了classLoader,这是相同的。是RestartClassLoader (org.spring.devtools)
如何解决此问题?
是否有更好的方法将服务bean注入到石英作业中?
答案 0 :(得分:0)
我对spring不熟悉,但是我将要谈论用Java进行转换
A b = (c)d
编译时间 检查(1):
d
和c
的类型必须具有某种关系,即子对父或父对子
孩子或同类型。
编译时间 检查(2):
c
必须与A
相同或派生。
运行时 检查:
运行时对象类型d
必须与c
相同或派生类型。
注意:
我想在您的情况下您不满足上一次检查的要求。