1

Spring を学んでいますが、実行時に Bean プロパティに値を割り当てる方法はありますか? 私がインターネットや書籍で試したすべての例では、通常、xml ファイルにハードコードされた値を実装しています。

たとえば、この Web サイトにある短いチュートリアルhttp://www.dzone.com/tutorials/java/spring/spring-bean-setter-injection-1.html

User クラスにはゲッター メソッドとセッター メソッドがありますが、その値はすべてbeans.xml でハードコーディングされています。main() の setter メソッドを使用して User のメンバー変数に値を設定しようとしましたが、多くのエラーが発生しました。

ですから、これが可能かどうか疑問に思っています。可能であれば、このチュートリアルのある短いサンプルまたはウェブサイトを見せていただければ幸いです。前もって感謝します。

Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unexpected failure during bean definition parsing
Offending resource: class path resource [SimpleValues.xml]
Bean 'insertValues'; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: <property> element for property 'name' must specify a ref or value
Offending resource: class path resource [SimpleValues.xml]
Bean 'insertValues'
    -> Property 'name'
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:324)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:579)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:477)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:446)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.processBeanDefinition(DefaultBeanDefinitionDocumentReader.java:311)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:202)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:181)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
    //More errors 

これは私のxmlファイルです

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="insertValues" class="com.SimpleValues.SimpleValues">
        <property name="name"/> 

        <property name="age"/>

        <property name="height"/>

    </bean>

</beans>

主な方法

public static void main(String[] args) {

        GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
        ctx.load("SimpleValues.xml");
        ctx.refresh();

        SimpleValues inject = (SimpleValues) ctx.getBean("insertValues");
        inject.setName("Andres");
        inject.setAge(20);
        inject.setHeight(7);

        System.out.println("Name: "+ inject.getName()+ " Age: "+inject.getAge()+ " Height: "+inject.getHeight());
    }
4

3 に答える 3

2

エラーを読むと、XMLが無効である(形式の悪いノードを使用している)と(正しく)不平を言っていることがわかります。他の場所にセッター<property/>への参照を取得して呼び出すコードがあると仮定して、単に削除します。 XMLからinsertValuesの3つのノード。<property/>

つまり、次を使用するだけです。

<bean id="insertValues" class="com.SimpleValues.SimpleValues" />

これにより、Beanが作成さinsertValuesれ、セッターは呼び出されません。

于 2012-11-27T03:48:15.463 に答える
1

あなたが直面している問題は、プロパティを操作するときに参照(つまり、別のSpring Beanへの参照)または値を提供する必要があることです。あなたの例では、(他のBeanではなく)プリミティブを参照しているので、次のようなもので逃げることができます。

<bean id="insertValues" class="com.SimpleValues.SimpleValues">
    <property name="name" value="Andres"/> 
    <property name="age" value="20"/>
    <property name="height" value="7"/>
</bean>

これにより、メソッド内のsetterメソッドをスキップし、アプリケーションコンテキストからフェッチした直後にmain、対応する値をBeanから取得できます。SimpleValues

を参照し、Springリファレンスドキュメントでセッターベースの依存性注入の詳細を読んでください。

于 2012-11-27T06:23:27.640 に答える
-1

ここで、値を動的に初期化しようとしているときに、Bean クラスの set プロパティで値を取得しようとし (Scanner メソッドを使用)、XML ファイルでデフォルト値を渡すと、setter メソッドにアクセスし、そこで値を初期化し、ゲッターメソッドで値を取得しながらそれらの値を使用できます。

于 2015-07-12T15:44:50.807 に答える