Spring @Profile和自动装配匹配

时间:2014-12-22 12:52:46

标签: java spring

我使用的是Spring框架(版本3.2),在我的应用程序中进行了一些重构之后,我遇到了使用Profile配置进行自动装配的问题。

假设我有一个由两个类实现的接口。这些类根据环境设置实现一堆方法。实际上我有3个不同的配置文件属性profile1,profile2和profile3。使用配置文件效果很好,但这是我第一次有一点问题,因为找不到2个候选人而无法注入课程。

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

可能的配置

  • profile1,profile3
  • profile2,profile3

是否可以指定在任何情况下应该实现哪个类(类似于@Qualifier)?

为什么不是@ActiveProfiles?

  

ActiveProfiles是一个用于声明的类级别注释   加载时应使用哪些活动bean定义配置文件   测试类的ApplicationContext。

在这种情况下,我需要知道是否有任何方法可以指示应该注入哪个类的配置文件。

请看下面的示例。

@Controller
public class exampleController {
    @Autowired
    // Suppose that this can be possible
    @Qualifier("{profile1, profile2}")
    Iexample example
}

如果以这种方式指定的限定符可能有效,那么我将能够解决此问题。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用@Primary注释标记一个bean,以指定它应该具有优先级作为自动线候选。 javadoc适用于Spring 4,但Spring 3.2的文档也提到了注释。