2009-10-21 7 views
29

春のプロパティをクラスのインスタンスではなくクラスオブジェクト自体に設定する方法はありますか?すなわちClassオブジェクトを設定するためのSpring構文?

よりもむしろあなたの "フー" のインスタンスを与える

<bean> 
    <property name="prototype" class="a.b.c.Foo">... 

は、何かのように:

<bean> 
    <property name="prototype" class="java.lang.Class" value="a.b.c.Foo.class"... 

編集: 最高(ワーキング)ソリューションは、これまで - 通常のインスタンス化を使用して導出しますセッターのクラス。ソリューションの面では、私は、これは我々が「不正行為」としてこれを説明したいと思います:

<bean class="Bar"> 
    <property name="prototype" class="a.b.c.Foo">... 


public class Bar{ 
     public void setPrototype(Object o){ 
       this.prototypeClass=o.getClass(); 

編集: dtsazzaの方法も同様に動作します。

編集: pedromarceの方法も同様に動作します。

答えて

37
<bean> 
    <property name="x"> 
     <value type="java.lang.Class">a.b.c.Foo</value> 
    </property> 
</bean> 

これでうまくいくはずです。

0

いいえ。Beanタグを使用すると、クラスをインスタンス化する方法をSpringに指示します。

0

<プロパティ名= "x" class = "a.b.c.Foo.class" >が機能しますか?それは何よりエレガントな構文はありません場合

+1

いいえ、Foo.classクラスが定義されていないので、ClassNotFoundを提供します。 –

11

あなたは確かに、)(static factory methodにClass.forNameを使用することができます... Classオブジェクトのインスタンスでなければなりません(と私はそこにあると信じていません):

<property name="x"> 
    <bean class="java.lang.Class" factory-method="forName"> 
     <constructor-arg value="a.b.c.Foo"/> 
    </bean> 
</property> 
+0

これは良い提案のように思えたので、私はこれを上書きしました。しかし奇妙なことに、春はjava.lang.Classの "ClassNotFoundException"と不平を言っています。 –

+0

心配しないで、その例外は誤った設定によるものです:)うまく動作します。 –

関連する問題