如何通过双重引用创建bean?

How to create bean by double reference?

我一开始不知道如何articulate/search这个问题。

所以初始化的bean是:

<bean id='domain' factory-bean='appConfig' factory-method='getDomain'/
<bean id='prod' class='java.lang.String'> <constructor-arg value='Base.Prod'/> </bean>
<bean id='test' class='java.lang.String'> <constructor-arg value='Base.Beta' /> </bean>

现在我需要根据域的值使用 Prod 或 Test 的值创建一个 bean "X"。如果域是 Prod,则使用 Prod 的 bean 来初始化 bean X,否则使用 Test。

${${domain}} 不起作用。我尝试搜索但没能找到与此相关的问题。

这会起作用

@Value("${domain}")
private String domain;

结合

-Ddomain=dev

Spring 将任何系统属性添加到从属性文件中读取的属性。

@EssexBoy 在 XML 中的回答看起来像这样:

<bean id="domain" class="java-lang.String">
    <constructor-arg>
        <value>${domain}</value>
    </construcotr-arg>
</bean>

终于找到答案了。有一种方法可以通过域引用 test/prod bean。您只需使用#{domain}。此处有更多信息:spEL

用作:

<bean id="ThatBean" class="whicheverClass">   
 <constructor-arg ref="#{domain}" /> 
</bean>