2011-07-11 24 views
16

Ben üç (A, B, C), yay context.xml, temel bir yapılandırma için, B ve C AI bir fasulye A.yay bağlamında bir dizi tanımlamak

içe tutulur:

 
<bean class="com.example.Ex"> 
    <property name="aString" value="${myString}" /> 
</bean> 

şimdi B ve C bağlamında myString özelliğini tanımlamak istiyorum, iki farklı özellik dosyası oluşturup yüklemeksizin yapmak mümkün müdür?

cevap

49

Özellikler ile uğraşmak yerine, Dize türündeki fasulyeyi bildirerek alternatif bir yöntem deneyebilirsiniz.

Bu şekilde:

A

<bean class="com.example.Ex"> 
    <property name="aString" ref="str" /> 
</bean> 

Ve sonra B beyan ve C bu şekilde "str" ​​referansı kapsamları:

B

<bean id="str" class="java.lang.String"> 
    <constructor-arg value="string_1"/> 
</bean> 

C

<bean id="str" class="java.lang.String"> 
    <constructor-arg value="string_2"/> 
</bean> 
+1

Bu doğru ... String sınıfının bir String ile bir kurucusu var ... Bende düşünmüyorum ... teşekkürler! – rascio

+0

Pratikten en iyi yolu hangisidir? ve neden? –

-7

Bu ayrıca yollardan biridir.

<bean id="str" class="com.example.Ex"> 
<constructor-arg type="java.lang.String" value="INDIA"/> 
burada tamlığı bir dize oluşturmanın başka bir yolu için

+1

Bu, B ve C bağlamlarının, bağlamda A – Kieran

+0

ile kararlaştırılan dizge için farklı değerlere sahip olma sorununu çözmenize yardımcı olmaz; bunun anlamı, argüman olarak bir String kabul eden Ex sınıfı için bir kurucu olduğunu ima eder. –

4

: valueOf kullanmak daha iyi bir fikir olabilir

yerine gereksiz yere oluşturulacak yeni bir nesne zorlar dize kurucu çağırmak burada bir "hiçbir şey" yapıcı olarak hizmet verebilir yöntemi:

<bean id="str" class="java.lang.String" factory-method="valueOf"> 
    <constructor-arg value="string_1"/> 
</bean> 

Ancak bu ek XML attri ayrıştırma yükü gibi akademik sadece Dizelerin oluşturulmasına da neden olan bute, yapıcı yerine arama değerinin performans kazancından daha büyük olabilir.

İlgili konular