我的目标是要有两个bean实现,这些实现取决于属性或类路径中类的存在。我尝试的是ConditionalOnPropery,请参见下文,但没有用。
我有一个类似的界面
public interface ApplicationConfigurator {
void configure(WicketApplication wicketApplication);
}
和两个实现类
@Component
@ConditionalOnProperty(
value = "environment",
havingValue = "client",
matchIfMissing = false
)
public class OfflineApplicationConfigurator implements ApplicationConfigurator {
@Override
public void configure(WicketApplication wicketApplication) {
}
}
和
@Component
@ConditionalOnProperty(
value = "environment",
havingValue = "server",
matchIfMissing = false
)
public class OnlineApplicationConfigurator implements ApplicationConfigurator {
@Autowired
private LsgConfiguration configuration;
@Override
public void configure(WicketApplication wicketApplication) {
try {
Class.forName("org.apache.catalina.core.StandardServer");
configuration.setHttpSchema(new TomcatConnectors().getHttpConnector().getScheme());
} catch (ClassNotFoundException | ApplicationConfigurationException exception) {
configuration.setHttpSchema("http");
}
}
}
我的配置基于xml,看起来像:
<bean id="onlineApplicationConfigurator" class="com.kion.lsg.service.core.web.config.OnlineApplicationConfigurator"/>
<bean id="offlineApplicationConfigurator" class="com.kion.lsg.service.core.web.config.OfflineApplicationConfigurator"/>
现在我收到错误消息:
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [....service.core.web.config.ApplicationConfigurator] is defined: expected single matching bean but found 2: onlineApplicationConfigurator,offlineApplicationConfigurator
感谢任何帮助
答案 0 :(得分:0)
您是否在application.yml中指定条件变量'environment'?由于这两个都是组件,因此应自动扫描,而无需在XML文件中声明。您可以启用调试模式以查看条件评估报告,这将提供更多的见解。