基于外部配置创建多个相同类型的bean
Creating multiple beans of same type based on external config
class SomeClass() implements Runnable
{
private SomeDevice someDevice;
private SomeOtherDevice someOtherDevice;
@Override
public void run()
{
...
someDevice.doSomething();
...
someOtherDevice.doSomething();
}
}
@Configuration
class Config
{
@Bean
@Scope("prototype")
public SomeDevice someDevice { return new SomeDevice() }
@Bean
@Scope("prototype")
public SomeOtherDevice someOtherDevice { return new SomeOtherDevice() }
}
我对 Spring 非常非常陌生,需要实现一些复杂的东西。
我有一个外部配置文件,指定我将拥有多少个 SomeDevice,以及每个 SomeDevice 将侦听的端口。
SomeClass 的实例将负责每个 SomeDevice。所以我将在 SomeClass1 中使用 SomeDevice1 运行,在 SomeClass2 中使用 SomeDevice2 运行,等等。
每个 SomeClass 还需要它自己的 SomeOtherDevice 实例。
我希望能够手动创建这些 bean,这样我就可以:
- 读取我的外部配置文件并创建适当数量的 SomeDevice
- 通过调用 someDevice.setPort()
根据外部配置指定它们的每个端口
- 将它们放入它们自己的 SomeClass 实例中。
- SomeClass 还需要它自己的 SomeOtherDevice 实例(SomeOtherDevice 不需要外部配置信息)
我已经尝试使用 bean 工厂来执行此操作,但在使用 bean 工厂创建 SomeDevice bean 后,我无法让 SomeClass 找到它们。它无法通过名称找到它们,只能通过 class。但是因为我将有多个 SomeDevice.class bean,所以我希望能够通过名称找到它们(并在创建它们时为它们指定唯一的名称)。我什至不确定我是否以“最佳”方式处理事情。如果有人能指出我正确的方向,我将不胜感激。
编辑:我忘了说我不想更改 SomeDevice 的源代码。所以我不能给那个 class 添加 Spring 注释,除非它是非常必要的。
class SomeClass() implements Runnable
{
private SomeDevice someDevice;
private SomeOtherDevice someOtherDevice;
@Override
public void run()
{
...
someDevice.doSomething();
...
someOtherDevice.doSomething();
}
}
@Configuration
class Config
{
@Bean
@Scope("prototype")
public SomeDevice someDevice { return new SomeDevice() }
@Bean
@Scope("prototype")
public SomeOtherDevice someOtherDevice { return new SomeOtherDevice() }
}
我对 Spring 非常非常陌生,需要实现一些复杂的东西。
我有一个外部配置文件,指定我将拥有多少个 SomeDevice,以及每个 SomeDevice 将侦听的端口。 SomeClass 的实例将负责每个 SomeDevice。所以我将在 SomeClass1 中使用 SomeDevice1 运行,在 SomeClass2 中使用 SomeDevice2 运行,等等。 每个 SomeClass 还需要它自己的 SomeOtherDevice 实例。
我希望能够手动创建这些 bean,这样我就可以:
- 读取我的外部配置文件并创建适当数量的 SomeDevice
- 通过调用 someDevice.setPort() 根据外部配置指定它们的每个端口
- 将它们放入它们自己的 SomeClass 实例中。
- SomeClass 还需要它自己的 SomeOtherDevice 实例(SomeOtherDevice 不需要外部配置信息)
我已经尝试使用 bean 工厂来执行此操作,但在使用 bean 工厂创建 SomeDevice bean 后,我无法让 SomeClass 找到它们。它无法通过名称找到它们,只能通过 class。但是因为我将有多个 SomeDevice.class bean,所以我希望能够通过名称找到它们(并在创建它们时为它们指定唯一的名称)。我什至不确定我是否以“最佳”方式处理事情。如果有人能指出我正确的方向,我将不胜感激。
编辑:我忘了说我不想更改 SomeDevice 的源代码。所以我不能给那个 class 添加 Spring 注释,除非它是非常必要的。