gpt4 book ai didi

java - 如何隐藏服务类并防止@Autowire?

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:16 24 4
gpt4 key购买 nike

我创建了一个框架,该框架具有多个接口(interface)的默认实现。

问题:如何隐藏接口(interface)的任何默认实现,以便框架的用户被迫使用 DefaultService 接口(interface),例如使用 @Autowired DefaultService 进行注入(inject)?

interface DefaultService {
}

@Component
@Async
@ConditionalOnNotWebApplication
public class MyService1 implements DefaultService {

}

@Component
@Async
@ConditionalOnWebApplication
public class MyService2 implements DefaultService {

}

我的服务条件确保每个环境中始终只连接一项服务。

最佳答案

作为@M。 Deinum 在上面评论说将实现服务包私有(private)化是正确的解决方案。我不知道 spring 仍然可以看到这些类,因为通常 spring 需要公共(public)访问注释。


一个可能的解决方案似乎是为实现创建一个额外的 @Configuration 类:

@Configuration
public class DefaultServiceConfiguration {
@Bean
@ConditionalOnNotWebApplication
public DefaultService getDefaultService1() {
return new MyService1();
}

@Bean
@ConditionalOnWebApplication
public DefaultService getDefaultService2() {
return new MyService2();
}
}

public interface DefaultService {
}

@Async
protected class MyService1 {
}

@Async
protected class MyService2 {
}

这样只有 DefaultService 接口(interface)对框架用户可见。

关于java - 如何隐藏服务类并防止@Autowire?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45757374/

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