2010-09-17 180 views
1

我有Java類是這樣的:如何使用applicationContext.xml中的嵌套屬性構造一個bean?

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,我會構建BeanToConstruct這樣的:

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

我該怎麼做我的applicationContext.xml裏面?這基本上是我想要做的,但它顯然不起作用。我可以將整個Config對象拉出到它自己的bean中,但我不希望這個額外的bean只是爲了使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> 

回答

2

在Spring 3.x中,你可以使用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

謝謝,工作就像一個魅力!我不知道表達式語言的語法。 – wolfcastle 2010-09-17 20:46:09

1

我認爲你可以使用UTIL:該物業的路徑:

<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

我添加了util命名空間,但仍然在文件上獲得瞭解析異常。 – wolfcastle 2010-09-17 20:46:35

+0

您使用的是哪個版本的Spring?這是爲Spring 2.x – gpeche 2010-09-17 21:01:52

+0

啊,我使用的是Spring 3.x – wolfcastle 2010-09-17 22:06:18

相關問題