问题详情:
一个Springboot项目,引用了一个jar包。这个jar里面做了一个定时任务,在父项目里面写了一个类并注入到spring中,将该类写到数据库中,定时任务会通过查找数据库,找到class名称,通过反射结合spring的getBean方法查询这个bean,然后执行。但是会报错:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type '********' available
但如果是根据这个class的beanName可以查询到Bean。
原因分析:
这个要执行的bean在父项目里,不在引用的jar包内,所以在jar里面通过Class.forName()方法查询类。但是这个class对象跟在spring容器里面的class对象不太一样。因为他们的classloader不是同一个。
解决方法:
目前就想到一个,把jar包内的源码改掉,先用type查一遍,找不到再用beanName找一遍。或者干脆只用beanName。
如有其它方法。望大神指点一二。