2017-07-04 66 views
1

我不知道如何阐述/首先搜索问题。如何通过双引用创建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> 

现在我需要创建一个bean“X”使用视域的值PROD或测试的值。如果域是Prod,则使用Prod的bean来初始化bean X,否则使用Test。

$ {$ {domain}}不起作用。我尝试搜索,但无法找到这个问题。

+0

也许这会有所帮助:https://stackoverflow.com/a/3486315/6239524 – kalsowerus

+0

我的代码没有出现在分组码。 –

+1

@Enigmagirl,把它放在代码格式化程序块中,而不是在blockquote中。 –

回答

0

终于找到了答案。有一种方法可以通过域引用test/prod bean。你只需要使用#{域}。点击此处了解详情:spEL

使用它作为:

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

这将工作

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

结合

-Ddomain=dev 

春季增加了从属性读取任何系统性能属性文件。

+0

使用相同的bean id我使用的是旧版本的Spring。所以它们是基于XML的 –

+1

@Enigmagirl值注释是相同的,它不受XML或Java配置的影响。 –

1

@ EssexBoy在XML的答案会是这个样子:

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

$ {domain}将给出域bean的值。但是我想要的是,获取名称是存储在域bean中的值的bean的值。 Domain = prod/test 因此,根据域值,我想引用prod bean或测试bean –

+0

@Enigmagirl你的prod /测试bean都是字符串,为什么一个字符串不能使用任何值? – kalsowerus

+0

其中任何一个都可以工作。当我得到作为Prod域名的价值时,我希望Base.Prod被分配给Bean X,当域值被测试时,我希望Base.Beta被分配给Bean X. 这是有条件的,我不知道如何使用xmls处理条件 –