在Spring EL中引用当前bean的属性

iro*_*hon 12 java spring spring-el

我想从单个类创建许多bean,所有bean都要在当前应用程序上下文中实例化,每个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>
Run Code Online (Sandbox Code Playgroud)

属性文件:

bean1.name=alfred
bean2.name=bobby
bean3.name=charlie
Run Code Online (Sandbox Code Playgroud)

类:

class Mybean {
    @Value("${#{prefix}.name}")
    String name;
}
Run Code Online (Sandbox Code Playgroud)

主类:

public class Main {
    @Autowired
    List<MyBean> mybeans;
}
Run Code Online (Sandbox Code Playgroud)

Ern*_*kov 2

您可以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>
Run Code Online (Sandbox Code Playgroud)