在Spring

时间:2015-09-11 04:32:48

标签: spring spring-mvc dependency-injection

我有一个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类中进行自动装配时,它工作正常。我曾经问过一个类似的问题,但是无法解决它。有什么想法吗?

0 个答案:

没有答案