【发布时间】:2023-03-05 10:08:01
【问题描述】:
我有一个基于 Spring 的 Java 应用程序,其中许多类使用以下自动装配接口。它们在所有地方都使用这个接口。
@Autowired
private IOperatingSystemManager m_operatingSystemManager;
目前,该接口只有一种实现方式如下:
@Component
public class WindowsManager implements IOperatingSystemManager
{
// Windows based shenanigans
}
应用程序按预期工作。春天是快乐的。每个人都很高兴。 好吧,不是每个人...
所以,我想添加另一个IOperatingSystemManager 的具体实现..
@Component
public class LinuxManager implements IOperatingSystemManager
{
// Linux based shenanigans
}
我们想要的是根据属性文件设置有条件地自动连接 IOperatingSystemManager。 (比如说.. os=windows.. 基本上是一个任意字符串,不能从系统属性等派生出来,因为这是一个虚拟示例。实际的管理器与操作系统无关。)
我不想更改任何已自动连接到接口并在接口外工作的类。我所需要的只是让 Spring 查看一些逻辑,这些逻辑将指示变量的自动装配并为以下各项连接正确的具体实例:
@Autowired
IOperatingSystemManager m_operatingSystemManager
在无数个地方。
文档和网络搜索谈论配置文件、条件、bean 工厂、限定符等。但我们不想使用配置文件;和限定符似乎需要更改所有接口变量注释。
工厂方法看起来很有前途,但对 Spring 来说是新手,找不到明确的答案。
实现此目的的简单且推荐的方法是什么?
【问题讨论】:
-
你应该看看弹簧配置文件
-
为什么不想使用配置文件?它们将是显而易见的解决方案......使用一些自制啤酒很可能是个坏主意。在维护代码时,这将更容易出错且更难理解。
-
@TobiasKremer 感谢您的评论。我们已经有预定义的配置文件,用于控制连接字符串等,我们不想为此引入新的配置文件。至少不是首选。我同意我们不想要自制解决方案。如果没有其他更简单的自然解决方案行之有效,那么我们将试一试个人资料。