java - Spring FactoryBean 可以访问上下文中的所有属性吗?

标签 java spring

我正在尝试编写一个 Spring FactoryBean 来生成 Request 对象的列表。请求的数量和进入其中的值可以在运行时配置,因此我想使用这些属性。

每个请求都包含一对 ID 值,因此我需要某种方式为 Factory Bean 提供这些 ID 对的可配置列表(现在将它们称为 A 和 B)。

到目前为止我所得到的是使用一个看起来像这样的属性:

requests=1/2,3/4,5/6

然后定义三个请求,一个请求 A=1 和 B=2,一个请求 A=3 和 B=4,一个请求 A=5 和 B=6。

这显然配置起来有点麻烦,而且很容易出错。更好的方法是将值拆分为多个属性,因此上面的内容可能类似于:

requests.1.A=1
requests.1.B=2

requests.2.A=3
requests.2.B=4

requests.3.A=5
requests.3.B=6

这只会让正在发生的事情变得更加明显。

但是,我找不到任何方法将我的 FactoryBean 配置为访问所有可用属性,而不仅仅是从上下文传入的特定命名属性。

我在这里遗漏了什么吗?或者 - 甚至更好 - 是否有更好的方法来进行这种更容易支持和维护的配置?

最佳答案

您可以注入(inject) Environment bean 到您的 FactoryBean 实例中,它由上下文提供,您不必配置它。我不确定你是如何配置你的bean的,但我总是喜欢Java配置。所以这个例子将使用Java配置。

@Configuration
class FactoryBeanConfig {
    @Bean
    public FactoryBean(final Environment env) {
        return new MyFactoryBean(env);
    }
}

Environment 实例将允许您访问所有属性,因为它是 PropertyResolver您可以以编程方式循环属性

int x = 1;
while(true) {
    env.getRequiredProperty("requests." + x + ".A")
    env.getRequiredProperty("requests." + x + ".B")
}

关于java - Spring FactoryBean 可以访问上下文中的所有属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30504493/

相关文章:

java - 生成大型 FlowFiles 时 Apache NiFi OutOfMemoryError

java - 使用 JdbcTemplate 插入多行

java - Spring Framework Rest API +添加了spring-security bug +依赖项

java - 移动动画在android中不流畅

java - 用 C 解码 java 序列化 .dat 文件

java - 从批处理文件中的 Java 应用程序获取退出代码

java - 有没有像 : #{systemProperties ['environment_variable_name' ]} to get the system variable? 这样的语法

java - 如何独立于 Spring 上下文使用 @Autowired 和 @Value 注释?

java - 找不到 Spring 默认登录页面

Java返回空列表而不是对象