【发布时间】:2015-11-03 19:39:43
【问题描述】:
我无法让@Profile 在@Bean 上工作,但它在@Configuration 类上工作正常。在我的模块测试中,我在第一个示例中正确获得了 MyServiceStub 自动装配,但在第二个示例中没有。
有人知道为什么吗?
这行得通:
MyConfig.java
@Configuration
@Import({StubConfig.class, RealConfig.class}
public class MyConfig {}
StubConfig.java
@Profile({"featureTest", "moduleTest"})
@Configuration
public class StubConfig {
@Bean
public MyService myService() {
return new MyServiceStub();
}
}
RealConfig.java
@Profile({"!featureTest", "!moduleTest"})
@Configuration
public class RealConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
但这不起作用:
MyConfig.java
@Configuration
public class MyConfig {
@Bean
@Profile({"featureTest", "moduleTest"})
public MyService myServiceStub() {
return new MyServiceStub();
}
@Bean
@Profile({"!featureTest", "!moduleTest"})
public MyService myService() {
return new MyService();
}
}
【问题讨论】:
-
您是否有一个名为
"!moduleTest"的明确个人资料? -
一直在为我工作,但我没有使用花括号。你能试着去掉花括号看看吗?
-
@Sanjay:这就是声明具有多个值的注释的方式。
@Profile的值是String[],因此如果数组中有一个元素,则大括号是隐式的。 -
@Makato:是的。它一直对我有用,所以我只是要求确认。 (我有一个非常相似的例子,包括!,这意味着不是。)
-
@Makato No. "!moduleTest" 的意思是“不是 moduleTest”。
标签: java spring spring-mvc