2016-05-10 3 views
11

Ich möchte eine Reihe von Beans aus einer einzigen Klasse erstellen, die alle im aktuellen Anwendungskontext instanziiert werden und jeweils auf Präfixeigenschaften in einer Eigenschaftendatei basieren. Ich habe ein Beispiel dafür gegeben, was ich erreichen möchte. Irgendwelche Tipps, wie dies ohne übermäßigen Code (z. B. ohne mehrere Klassen, komplizierte Fabriken usw.) zu tun wäre, würden geschätzt werden.Verweis auf eine Eigenschaft der aktuellen Bean in Spring EL

XML-Konfiguration:

<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> 

Eigenschaften Datei:

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

Klasse:

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

Hauptklasse:

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

Antwort

2

können Sie PropertyPlaceholderConfigurer verwenden Bean Namen direkt zu setzen (statt dessen Präfix des Speicherns):

<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> 
+0

Können Sie mir ein Beispiel, wie Sie die resultierende Eigenschaft im Frühjahr EL in einem @Value Anmerkung verweisen würde? – ironchefpython

+0

Ich denke, Sie finden es [hier] (https://stackoverflow.com/questions/2041558/how-does-spring-3-expression-language-interact-with-property-placeholders?rq=1) –

+0

Das erklärt, wie Referenzieren von Daten in der Spring-Eigenschaft-Platzhalter-Bean. Es wird nicht erläutert, wie auf Eigenschaften verwiesen wird, die für die zu konfigurierende * Bean * definiert sind. – ironchefpython