Spring mvc 我在我的SpringMVC项目中得到了NullPointerException?

Spring mvc 我在我的SpringMVC项目中得到了NullPointerException?,spring-mvc,Spring Mvc,我有一个基于SpringMVC框架的简单库项目。我将向我的author表中添加一个新的author,但是我得到了NullPointerException。 我在下面提供了与此函数相关的添加类。有人能说什么不对吗 @Controller public class AuthorController { @RequestMapping("/addAuthor") protected ModelAndView addAuthor() throws Exception { ModelAndVie

我有一个基于SpringMVC框架的简单库项目。我将向我的author表中添加一个新的author,但是我得到了NullPointerException。 我在下面提供了与此函数相关的添加类。有人能说什么不对吗

@Controller
public class AuthorController {

@RequestMapping("/addAuthor")
protected ModelAndView addAuthor() throws Exception {
    ModelAndView model = new ModelAndView("addAuthor");
    return model;
}

@RequestMapping("/addAuthorExecution")
protected ModelAndView addAuthorExecution(
        @RequestParam("authorName") String authorName) throws Exception {
    ApplicationContext cnx = new ClassPathXmlApplicationContext("spring.xml");
    AuthorService authorService = (AuthorService) cnx.getBean("authorService");
    authorService.addAuthor(authorName);
    ModelAndView model = new ModelAndView("adminFunctionsPage");
    model.addObject("successMsg", "Your request has been processed Successfully.");
    return model;
}
}
服务类别:

public class AuthorService {
@Autowired
Author author;
@Autowired
AuthorDAO authorDAO;

public void addAuthor(String authorName) throws ClassNotFoundException,
        SQLException {
    AuthorDAO authorDAO = new AuthorDAO();
    authorDAO.addAuthor(authorName);
}
}
DAO类:

public class AuthorDAO extends JdbcDaoSupport {

public void addAuthor(String authorName) {
    String sql = "insert into tbl_author (authorName) values (?)";
    this.getJdbcTemplate().update(sql, new Object[] { authorName });
}


private static final class AuthorMapper implements RowMapper<Author> {
    @Autowired
    Author author;

    @Override
    public Author mapRow(ResultSet rs, int rowNum) throws SQLException {
        author.setAuthorId(rs.getInt("authorId"));
        author.setAuthorName(rs.getString("authorName"));
        return author;
    }

}
}
XML:


你好,你能试试吗

<property name="url" value="jdbc:mysql://localhost:3306/library"/>

而不是

<property name="url" value="jdbc:mysql://localhost/library"/>

这将是一个问题

几个错误

  • 您正在自动连接POJO实体类
    Auther
    。这是错误的
  • 希望您在
    AuthorService
  • 您正在
    addAuthor
    方法内创建
    AuthorDAO
    的对象。您应该注意,不应手动构造
    AutherDAO
    ,因为该类
    AutherDAO.AuthorMapper
    中有
    autowired
    对象可用。通过手动构造它们,这些自动连接将不会连接到对象
  • 如果我完全重写您的服务类,它将是这样的

        @Service
        public class AuthorService {
    
            @Autowired
            AuthorDAO authorDAO;
    
            public void addAuthor(String authorName) throws Exception {
               authorDAO.addAuthor(authorName);
            }
        }
    

    错误出现在AuthorDAO的第32行。这条线是什么?你推断出什么?你不认为行映射程序应该为每一行创建一个新的作者,而不是每次调用它时都修改同一个(不是)自动连接的作者吗?另一方面,既然已经有了AuthorDAO,为什么还要构造一个AuthorDAO呢?它是由Spring在服务中自动连接的。问题是我的服务类中的附加AuthorDAO。谢谢你的评论。
    <property name="url" value="jdbc:mysql://localhost:3306/library"/>
    
    <property name="url" value="jdbc:mysql://localhost/library"/>
    
        @Service
        public class AuthorService {
    
            @Autowired
            AuthorDAO authorDAO;
    
            public void addAuthor(String authorName) throws Exception {
               authorDAO.addAuthor(authorName);
            }
        }