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

Java 如何通过双重引用创建bean?,java,spring,javabeans,Java,Spring,Javabeans,首先,我不知道如何阐明/研究这个问题 因此,初始化的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.St

首先,我不知道如何阐明/研究这个问题

因此,初始化的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>
这将起作用

@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>

${domain}

终于找到了答案。有一种方法可以通过域引用测试/产品bean。你只需要使用#{domain}。更多信息请点击此处:

将其用作:

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


也许这有帮助:我的代码没有出现在块代码中。@Enigmagirl,把它放在代码格式化程序块中,而不是块引号中。谢谢@M.Prokhorov!您不需要创建两个不同的bean。您可以使用一个bean创建两个属性文件。如果您有更多属性需要更改,我将使用旧版本的Spring。所以它们是XMLbased@Enigmagirl值注释是相同的,它不受XML或Java配置的影响。${domain}将给出域bean的值。但我想要的是,获取bean的值,其名称是存储在域bean中的值。Domain=prod/test,所以基于域值,我想引用prodbean或testbean@Enigmagirl您的prod/testbean都是字符串,为什么一个字符串和一个值都不起作用呢?它们中的任何一个都起作用。当我将domain的值作为Prod时,我希望为Bean X分配Base.Prod,当域值为test时,我希望为Bean X分配Base.Beta。它是有条件的,我不知道在使用时如何处理条件xmls@Enigmagirl如果不能直接使用
${domain}
的值,那么为每个环境包含不同的XML可能是唯一的选择……唉!我想知道以前是如何处理条件bean的。比如,如果某个值为null,则使用abc值初始化bean,否则初始化xyz值。