2010-09-17 4 views
1

J'ai des classes Java comme ceci:Comment construire un bean en utilisant des propriétés imbriquées dans applicationContext.xml?

public class Config { 
    public Config1 getConfigOpt1(); 
    public Config2 getConfigOpt2(); 
} 

public class SomeBean { 
    public Config getEntireConfig(); 
} 

public class BeanToConstruct { 

    public static BeanToConstruct createAndStart(Config1 config1, Config2 config2) 
} 

SomeBean Étant donné, je construirait BeanToConstruct comme ceci:

SomeBean someBean = .... 
BeanToConstruct bean = BeanToConstruct.createAndStart( 
    someBean.getEntireConfig().getConfigOpt1(), 
    someBean.getEntireConfig().getConfigOpt2()) 

Comment puis-je faire dans mon applicationContext.xml? C'est essentiellement ce que je veux faire, mais cela ne marche évidemment pas. Je pourrais tirer l'ensemble de l'objet Config dans son propre bean, mais je ne veux pas avoir ce bean supplémentaire qui est seulement nécessaire pour rendre possible la construction de BeanToConstruct.

<bean class="com.example.SomeBean" id="someBean"/> 
<bean class="com.example.BeanToConstruct" factory-method="createAndStart" id="myBean"> 
    <constructor-arg> 
     <bean factory-bean="someBean" factory-method="getEntireConfig().getConfigOpt1()"/> 
    </constructor-arg> 
    <constructor-arg> 
     <bean factory-bean="someBean" factory-method="getEntireConfig().getConfigOpt2()"/> 
    </constructor-arg> 
</bean> 

Répondre

2

3.x Spring vous pouvez utiliser expression language:

<bean class="com.example.BeanToConstruct" factory-method="createAndStart" id="myBean"> 
    <constructor-arg value = "#{someBean.entireConfig.configOpt1}" /> 
    <constructor-arg value = "#{someBean.entireConfig.configOpt2}" /> 
</bean> 
+0

Merci, a travaillé comme un charme! Je n'étais pas au courant de la syntaxe du langage d'expression. – wolfcastle

1

Je pense que vous pouvez utiliser util: propriété chemin pour cela:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"> 

... 

<bean class="com.example.SomeBean" id="someBean"/> 
<bean class="com.example.BeanToConstruct" factory-method="createAndStart" id="myBean"> 
    <constructor-arg> 
     <util:property-path path="someBean.entireConfig.configOpt1"/> 
    </constructor-arg> 
    <constructor-arg> 
     <util:property-path path="someBean.entireConfig.configOpt2"/> 
    </constructor-arg> 
</bean> 

.... 
</beans> 
+0

J'ai ajouté l'espace de noms util, mais j'ai quand même obtenu des exceptions d'analyse sur le fichier. – wolfcastle

+0

Quelle version de Spring utilisez-vous? C'est pour Spring 2.x – gpeche

+0

ah, j'utilise Spring 3.x – wolfcastle

Questions connexes