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

Passing a parameter to a bean referenced in a constructor in Spring

我想将参数传递给从 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>

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

另一种方法是就地声明 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>