2017-07-04 53 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處理條件 –

相關問題