将参数传递给Spring中构造函数中引用的bean

时间:2015-04-08 19:00:00

标签: java spring java-ee applicationcontext

我想将参数传递给Spring Context.xml中另一个bean引用的bean。它甚至可能吗?

注意:从不同的bean引用时,DISCARD bean将具有不同的值。

<bean id="dropBadTimestampFilter" class="TimestampRangeMatcherModifier">
    <constructor-arg index="0" value="_TIME"/>
    <constructor-arg index="1" ref="DISCARD" /> <!--Want to pass a prameter value to this-->
</bean>

<bean id="DISCARD" class="SettingModifier">
     <property name="fields">
         <map>
             <entry key="_ORG" value="CONSTANT"/>
             <entry key="CAUSE" value="______"/>  <!-- Want to be passed from bean referring it-->
         </map>
    </property>
</bean>

有没有一种方法可以使用Spring表达式语言使用bean来引用bean,以便以下方法可行:                             

<bean id="DISCARD" class="SettingModifier">
     <property name="fields">
         <map>
             <entry key="_ORG" value="CONSTANT"/>
             <entry key="CAUSE" value="#{dropBadTimestampFilter.CAUSE}"/>  <!-- Can this bean get reference of all the beans using it and not only dropBadTimestampFilter. -->
         </map>
    </property>
</bean>

1 个答案:

答案 0 :(得分:0)

基本上,如果它具有不同注入的不同属性,那么您将使该bean成为原型bean。然后,在"CAUSE" bean的@PostConstruct方法中设置TimestampRangeMatcherModifier键的值。在XML中,您可以使用init-method标记的bean属性定义此类方法。

另一种方法是通过就地声明bean,如下所示:

<bean id="dropBadTimestampFilter" class="TimestampRangeMatcherModifier">
    <constructor-arg index="0" value="_TIME"/>
    <constructor-arg index="1">
        <bean class="SettingModifier"> <!-- no need of id here -->
            <property name="fields">
                <map>
                   <entry key="_ORG" value="CONSTANT"/>
                   <entry key="CAUSE" value="______"/>
               </map>
            </property>
        </bean>
    </constructor-arg>
</bean>