2

これは私のクラスです:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
PropertyPlaceholderConfigurer pph = new PropertyPlaceholderConfigurer();
pph.setLocations(new Resource[]{new ClassPathResource("one.properties"), new ClassPathResource("two.properties")});
context.addBeanFactoryPostProcessor(pph);
context.refresh();

Controller obj1 = (Controller) context.getBean("controller");
System.out.println(obj1.getMessage());

Controller2 obj2 = (Controller2) context.getBean("controller2");
System.out.println(obj2.getMessage());
System.out.println(obj2.getInteger());

これは、関連する xml 構成です。

   <bean id="controller" class="com.sample.controller.Controller">
       <property name="message" value="${ONE_MESSAGE}"/>
   </bean>
   <bean id="controller2" class="com.sample.controller.Controller2">
       <property name="message" value="${TWO_MESSAGE}"/>
        <property name="integer" value="${TWO_INTEGER}"/>
   </bean>

one. プロパティ:

ONE_MESSAGE=ONE

2 つのプロパティ:

TWO_MESSAGE=TWO
TWO_INTEGER=30

TWO_MESSAGE は文字列 TWO として正しく割り当てられます。TWO_INTEGER を挿入すると、NumberFormatException が発生します。String を取り、それを Controller2 クラスの int に変換するセッターを追加せずにこれを達成する方法はありますか?

エラー :

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'controller2' defined in class path resource [beans.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'integer'; nested exception is java.lang.NumberFormatException: For input string: "${TWO_INTEGER}"

ありがとう。

4

1 に答える 1

5

おそらくあなたのアプリケーションは次の行に分類されます (間違えた場合は完全なスタックトレースを提供してください):

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

Spring は解析できないためです${TWO_INTEGER}(このプロパティはまだコンテキストに読み込まれていません)。したがって、プロパティがロードされた後、コンテキストの初期化を移動できます。

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
 PropertyPlaceholderConfigurer pph = new PropertyPlaceholderConfigurer();
 pph.setLocations(new Resource[]{new ClassPathResource("one.properties"), new ClassPathResource("two.properties")});
 context.addBeanFactoryPostProcessor(pph);
 context.setConfigLocation("beans.xml");
 context.refresh();

この助けを願っています。

于 2013-08-02T19:53:40.623 に答える