0

私はSpringを学び、プロパティをPOJOに注入する簡単なプログラムを書いています。以下はメインクラスです -

public class test {
    public static void main (String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
        MySpring sm = (MySpring)context.getBean("myspring");
        System.out.println(sm);
    }

}

POJO は以下のとおりです --

  public class MySpring {
    public String count;
    void setcount(String val){
        this.count = val;
    }
    String getcount(){
        return count;
    }

}

設定ファイルは以下のとおりです --

   <?xml version="1.0" encoding="UTF-8"?>

<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-3.0.xsd">
  <bean id="myspring" class="MySpring" >
   <property name="count" value="PowerShell" />
   </bean>
</beans>

ただし、test.java クラスを実行すると、次のエラーが発生します -

 Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myspring' defined in class path resource [Beans.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'count' of bean class [MySpring]: Bean property 'count' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1396)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    at 
.....
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at test.main(test.java:7)
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'count' of bean class [MySpring]: Bean property 'count' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1064)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:924)

これが一般的なエラーであることはわかっていますが、すべて問題ないように見えるため、根本的な原因を見つけることができません。問題の可能性があるものについての指針は高く評価されています。

4

6 に答える 6

0

注入するには、Beanのプロパティに 厳密Springに従ってください。常にです。プロパティの場合はそこに値を読み取るためにあり、プロパティの場合はそこに値を書き込むためにあります。naming conventionPropertiesaccessed via method calls on their owning objectreadablegetter methodwritablesetter method

したがって、あなたの場合、 (MySpring)とクラスのプロパティSpring's IOC container implementation ApplicationContextをインスタンス化してみてください。これは、ですが、あなたの中には、に該当するそのようなメソッドはありません。beaninjectMySpringcountinjecting purpose container try to finding out the getCount() getter method inside your MySpring classclassException

Beanを変更しました

class MySpring
{
    private String count;

    /**
     * @return the count
     */
    public String getCount() {
        return count;
    }

    /**
     * @param count the count to set
     */
    public void setCount(String count) {
        this.count = count;
    }   

}
于 2012-10-15T07:16:36.010 に答える
0

Beanプロパティ'count'が書き込み可能でないか、setterメソッドが無効です

countあなたは財産のためのセッターを持っている必要があります

于 2012-10-15T06:25:54.213 に答える
0

セッターはsetCount()、ではなく、setcount()

于 2012-10-15T06:27:31.950 に答える
0

キャップのコードvoid setcount(String val){は「C」に変更する必要があります

void setCount(String val)

get/set後の開始レターはCAPSにある必要があります。同じことがゲッターメソッドにも当てはまります。

于 2012-10-15T06:28:19.527 に答える
0

セッター/ゲッターに名前を付けるときは、Javabeans の命名規則に従う必要があります。これは、BeanIntrospection フレームワークの要件です。以下が機能するはずです:

void setCount(String val){
  this.count = val;
}

String getCount(){
  return count;
}
于 2012-10-15T06:35:37.467 に答える
0

Spring IoC コンテナーは、JavaBeans 仕様 ( http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html ) で説明されているように、setter インジェクションをサポートしています。

「setCamelVarName()」のようなものを検索し、メソッド名の「set」の後の最初の文字を小文字にし、残りのメソッド名をそのまま使用してプロパティ名を推測します。そのため、クラスで「count」属性を設定するには、 ではpublic void setCount(int count)なく public メソッドを宣言する必要がありpublic void setcount(int count)ます。この最後のものは、いずれにせよ、優れた Java 開発慣行にも反しています。

于 2014-07-02T09:46:47.047 に答える