我有一个Spring启动应用程序,其中基于一个变量,我需要调用一个接口的相应实现类。这就是我现在所拥有的:
public interface Parent{
public void call();
}
public class ABC implements Parent{
public void call(){
System.out.println("Called ABC");
}
}
public class XYZ implements Parent{
public void call(){
System.out.println("Called XYZ");
}
}
@Service("caller")
public class Caller{
@Autowired
protected OrderInfoRepository orderInfoRepository;
AnnotationConfigApplicationContext context;
public Caller(){
context = new AnnotationConfigApplicationContext(Config.class);
}
public void callMethod(String param){
Parent p = (Parent) context.getBean(param+"_Caller");
p.call();
}
}
@Configuration
public class Config{
@Bean(name="ABC_Caller")
public Parent getABC(){
return new ABC();
}
@Bean(name="XYZ_Caller")
public Parent getXYZ(){
return new XYZ();
}
}
@Repository
public interface MyRepo extends Repository<MyDAO, Long> {
// ....
}
基本上我想要做的是,根据传递给Caller.callMethod()的参数,我想添加&#34; _Caller&#34;到param,并调用相应的实现类。所以,我定义了一个@Configuration类,在那里我定义了要返回的实现类。然后使用AnnotationConfigApplicationContext,我得到相应的bean。这很好。
我遇到的问题是,当我尝试在实现类中自动跟踪任何内容时,我得到一个NoSuchBeanDefinitionException。例如,当我在实现类ABC
中自动装配时public class ABC implements Parent{
@Autowired
MyRepo myRepo;
public void call(){
System.out.println("Called ABC");
}
}
当我尝试启动应用程序时,我得到Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.persistence.repositories.MyRepo]
。但是,当我在Caller类中进行自动装配时,它工作正常。我曾经问过一个类似的问题,但是无法解决它。有什么想法吗?