gpt4 book ai didi

java - Spring Bean 根据条件创建一个接口(interface)

转载 作者:行者123 更新时间:2023-12-01 16:15:29 24 4
gpt4 key购买 nike

我的目标是拥有两个 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

感谢任何帮助

最佳答案

您是否在 application.yml 中指定条件变量“环境”?由于这两个都是组件,因此应该自动扫描,无需在 XML 文件中声明。您可以启用 Debug模式来查看条件评估报告,这将更加深入。

关于java - Spring Bean 根据条件创建一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62403106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com