Spring 上下文:可以在 XML 中定义变量(不是属性)并在运行时使用它来获取特定的引用 bean 吗?

Spring Context: It's possible to define variables (not properties) in a XML and use it in runtime to obtain specific referenced beans?

我没有太多使用 Spring 上下文的经验,我不知道这是否可能...我正在尝试设置 Spring XML 文件一个变量来定义一个 bean 引用(不是 属性)。

现在我有一个具体的 xml:

keyIntegrator-key1.xml

<import resource="classpath:/events/key-events.xml" />

<context:annotation-config />  

<bean id="keyIntegrator" class="com.emulated.KeySimulator" >
    <property name="readList">
        <list>
            <bean class="com.emulated.ListEventGenerator">
                <property name="eventList">
                     <ref bean="key-1-ok"/>
                </property>
            </bean>
        </list>
    </property>
</bean>

所有键都在另一个 xml 文件中定义 (key-events.xml)。

我必须在 Java 运行时加载 bean "keyIntegrator" 只有一个键,这是 Java 程序中的输入参数(我使用参数来决定 xml 要加载的文件)

我的问题是是否可以在 xml 文件中定义一个变量并使用该变量获取引用的 bean:

像这样:

keyIntegrator-generic.xml

<import resource="classpath:/events/key-events.xml" />    

<context:annotation-config />      

<bean id="keyIntegrator" class="com.emulated.KeySimulator" >    
    <property name="readList">    
        <list>    
            <bean class="com.emulated.ListEventGenerator">    
                <property name="eventList">
                     <ref bean="key-{inputKeyParam}-ok"/>    
                </property>
            </bean>
        </list>
    </property>
</bean>

在 Java 程序中,我需要传递参数来获取 bean,如下所示:

keySimulatorBean = (KeySimulator) context.getBean("keyIntegrator", "1");

有什么方法可以做到这一点?

非常感谢!

可以使用 Spring Expression Language

例如,可以使用系统 属性

定义对 bean 的引用
<ref bean="key-#{systemProperties.inputKeyParam}-ok"/>

它将允许根据提供的 VM 选项值引用不同的 bean,例如-DinputKeyParam=1

非常感谢,它对我有用:)

我在 Java 代码中设置了系统 属性 值:

System.setProperty("inputKeyParam", "1");