背景:
想动态的获取某个类中某个方法,并执行。
过程:
写了个抽象类
@Slf4j
public abstract class ChoosePartBuilder {
@Resource
private SomeAdaptor someAdaptor;
public void MethodA(){
someAdaptor.getMethodB();
}
}
有一个继承类
package com.crm.service.choose
@Service
@Slf4j
public class AllChoosePartBuilder extends ChoosePartBuilder {
@Override
public void MethodA() {
}
}
通过在数据库中配置类的路径com.crm.service.choose.AllChoosePartBuilder,根据class.forName(),获取到类,通过getDeclaredMethod获取方法,然后invoke执行。
报错,No qualifying bean of type someAdaptor availabe
开始以为是因为抽象类的原因,不能直接@Resource,然后换成SpringContextUtils.getBean。。还是不行。。最后发现。原来是class.forName()搞的鬼!!因为在forName时相当于new了一个类,不是启动时加载到spring容器中的类,所以someAdaptor是空!!
解决:
在项目启动时,加载个map<path,ChoosePartBuilder>,使用时,根据路径获取到对应的实体,就可以啦!
网友评论