Ссылка на свойство текущего bean в Spring EL

Я хотел бы создать несколько beans из одного класса, все из которых будут созданы в текущем контексте приложения, каждый из которых основывается на префиксах свойств в файле свойств. Я привел пример того, чего я пытаюсь достичь. Любые советы о том, как сделать это без чрезмерного кода (например, без нескольких классов, сложных фабрик и т.д.), Будут оценены.

Конфигурация 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;
}

Ответ 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>