gpt4 book ai didi

spring - 仅在没有其他服务的情况下为接口(interface)加载服务

转载 作者:行者123 更新时间:2023-12-02 04:08:19 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个默认实现接口(interface),即服务:

public interface MessageGenerator {
Message getMessage();
}

@Service
public class PropertiesMessageGenerator implements MessageGenerator {
@Override
public Message getMessage() {
return doSmth();
}
}

此服务由 spring boots #ComponentScan 加载,在我使用 @Profile 添加新实现之前一切正常

@Service
@Profile("p1")
public class ProfileMessageGenerator implements MessageGenerator {
@Override
public Message getMessage() {
return doSmthWithProfile();
}
}

ProfileMessageGenerator 在上下文中时,如何停止加载到 DI 服务 PropertiesMessageGenerator

附言我不能在 MultipleMessages 上使用 @Profile("default"),因为我一次加载了更多配置文件。

最佳答案

晚会有点晚,但可能对 future 的访客有帮助:

我通过像这样配置我的服务让它在 Spring Boot 2.5.1 中工作:

@Service
@ConditionalOnMissingBean(value = BaseService.class, ignored = DefaultService.class)
public class DefaultService implements BaseService {
...
}

如果注释中没有 ignored 字段,条件将匹配 DefaultService,因此不会实例化它。这种行为有点奇怪,但将其自身排除在条件之外使其有效。有了这个,我可以创建一个附加的 BaseService 实现,它只是用 @Service 注释,而不是实例化 DefaultService 而是另一个实现.

关于spring - 仅在没有其他服务的情况下为接口(interface)加载服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249857/

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