【问题标题】:Referencing a property of the current bean in Spring EL在 Spring EL 中引用当前 bean 的属性
【发布时间】:2016-05-10 19:02:42
【问题描述】:

我想从一个类创建多个 bean,所有这些都将在当前应用程序上下文中实例化,每个都基于属性文件中的前缀属性。我已经举了一个例子来说明我正在努力实现的目标。任何关于如何在没有过多代码的情况下执行此操作的提示(例如,没有多个类、复杂的工厂等)将不胜感激。

XML 配置:

<bean id="bean1" class="Mybean">
    <property name="prefix" value="bean1"/>
</bean>

<bean id="bean2" class="Mybean">
    <property name="prefix" value="bean2"/>
</bean>

<bean id="bean3" class="Mybean">
    <property name="prefix" value="bean3"/>
</bean>

属性文件:

bean1.name=alfred
bean2.name=bobby
bean3.name=charlie

类:

class Mybean {
    @Value("${#{prefix}.name}")
    String name;
}

主类:

public class Main {
    @Autowired
    List<MyBean> mybeans;
}

【问题讨论】:

    标签: java spring spring-el


    【解决方案1】:

    您可以使用PropertyPlaceholderConfigurer 直接设置 bean 的名称(而不是存储其前缀):

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="app.properties"/>
    </bean>
    
    <bean id="bean1" class="Mybean">
        <property name="name" value="${bean1.name}"/>
    </bean>
    
    <bean id="bean2" class="Mybean">
        <property name="name" value="${bean2.name}"/>
    </bean>
    
    <bean id="bean3" class="Mybean">
        <property name="name" value="${bean3.name}"/>
    </bean>
    

    【讨论】:

    • 你能给我一个例子,说明你如何在 @Value 注释中引用 Spring EL 中的结果属性吗?
    • 我想你找到了here
    • 这解释了如何在 Spring 属性占位符 bean 中引用数据。它没有解释如何引用正在配置的 bean 上定义的属性。
    • @Value 的评估在 bean 后处理器中进行。可能,您不能引用正在初始化的 bean 的属性。
    • 那么基本上没有办法将bean定义上的属性集的信息提供给bean后处理器?这似乎不合逻辑。顺便说一句,我需要在 @Value 注释中使用它的原因是我在 bean 上设置了几十个字段,我真的不想在上面添加几十个属性值每个 bean,我宁愿提供一个前缀,让 Spring 为我计算这些字段。
    猜你喜欢
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    相关资源
    最近更新 更多