【问题标题】:org.springframework.beans.NotWritablePropertyException: Invalid propertyorg.springframework.beans.NotWritablePropertyException:无效的属性
【发布时间】:2017-05-01 06:06:35
【问题描述】:

您好,我是 Spring 新手,目前我正在使用 Maven 运行我的应用程序

但是当我运行我的项目时,我遇到了如下异常

bean 类 [com.ensis.spring.MovieLister] 的“年份”:bean 属性“年份”不可写或设置方法无效。 setter 的参数类型是否与 getter 的返回类型匹配?

主要:

public class Main {

    public static void main(String[] args){

        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        MovieLister movieLister = (MovieLister)ctx.getBean("lister");
        movieLister.printMoviesByYear();
    }
}

电影:

private int year;
    private String name;

    public Movie(int year, String name) {
        super();
        this.year = year;
        this.name = name;
    }

    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

电影查找器:

public class MovieFinder {

    private static List<Movie>moviesList;

    static{

        moviesList.add(new Movie(1990, "A"));
        moviesList.add(new Movie(1991, "B"));
        moviesList.add(new Movie(1992, "C"));
        moviesList.add(new Movie(1993, "D"));
        moviesList.add(new Movie(1994, "E"));
        moviesList.add(new Movie(1995, "F"));
    }

    public List<Movie>findMoviesByYear(int year){

        List<Movie>findMovies=new ArrayList<Movie>();

        for(Movie movie:moviesList){
            if(year==movie.getYear()){
                findMovies.add(movie);          
                }
        }

        return findMovies;
    }

}

电影列表:

public class MovieLister {

    private int year;
    private MovieFinder movieFinder;


    public void printMoviesByYear(){

        List<Movie>found = movieFinder.findMoviesByYear(year);
        for(Movie movie:found){
            System.out.println("So movies are======>"+movie.getName());
        }
    }
}

applicationContext.xml

<?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="lister" class ="com.ensis.spring.MovieLister" autowire="byType">
   <property name="year" value="1991"/>
   </bean>
   <bean id="finder" class="com.ensis.spring.MovieFinder"/>
   </beans>

【问题讨论】:

  • 请尝试在 MovieLister 类中添加年份的 getter 和 setter 方法并检查
  • 嗨@avinash readdy java.lang.NullPointerException at com.ensis.spring.MovieFinder.(MovieFinder.java:12)
  • 现在我遇到了异常
  • 你在哪里初始化你的私有静态列表moviesList ?
  • 感谢@avinash redyy 现在我发现了问题

标签: java spring maven


【解决方案1】:

向 MovieLister 添加一个 setter:

public void setYear(final int year) {
  this.year = year;
}

这是必需的,因为成员变量 year 是私有的。

旁注: 如果 MovieLister 实例需要一年或任何其他成员变量,我强烈建议创建一个设置这些变量的构造函数。

【讨论】:

  • com.ensis.spring.MovieFinder 处的 java.lang.NullPointerException。(MovieFinder.java:12)
  • 现在我在添加你的代码后得到了这个异常
  • movieFinder 设置了吗?我在您的 applicationContext 或代码中看不到它。也许你打算在 applicationContext 中设置 moveFinder,但现在它只是一个 bean,并没有设置为 MovieLister 的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多