我正在使用Spring框架(版本3.2),在应用程序中进行了一些重构之后,我遇到了关于配置文件的自动装配问题。
假设我有一个接口,由两个类实现。这些类根据环境设置实现了一堆方法。实际上,我有三个不同的配置文件profile1、profile2和profile3。使用配置文件很好用,但是这里我第一次遇到了一个小问题,因为找到了两个候选项,所以无法注入类。
如果以这种方式指定限定符可能有效,那么我就能解决这个问题。
谢谢。
假设我有一个接口,由两个类实现。这些类根据环境设置实现了一堆方法。实际上,我有三个不同的配置文件profile1、profile2和profile3。使用配置文件很好用,但是这里我第一次遇到了一个小问题,因为找到了两个候选项,所以无法注入类。
public interface Iexample {
public void doSomething();
}
@Profile("profile1")
public class classA implements Iexample {
doSomething(){..}
}
@Profile("{profile2, profile3}")
public class ClassB implements Iexample {
doSomething(){..}
}
public class Test1 {
@Autowired
Iexample example; //Should use implementation based on profile1 or profile2
}
public class Test2 {
@Autowired
Iexample example; //Should use implementation based on profile3 only
}
当前配置的属性:
spring.profiles.active= profile1,profile3
可能的配置
- 配置文件1,配置文件3
- 配置文件2,配置文件3
是否有一种方法可以指定在任何情况下应该实现哪个类(类似于@Qualifier)?
为什么不使用@ActiveProfiles?
@ActiveProfiles是一个类级别的注解,用于声明在加载测试类的ApplicationContext时应该使用哪些活动的bean定义配置文件。
在这种情况下,我需要知道是否有一种方式可以根据配置文件来确定应该注入哪个类。
请参考下面的示例。
@Controller
public class exampleController {
@Autowired
// Suppose that this can be possible
@Qualifier("{profile1, profile2}")
Iexample example
}
如果以这种方式指定限定符可能有效,那么我就能解决这个问题。
谢谢。