自动装配的JdbcTemplate不断抛出NullPointerException

时间:2017-04-12 15:07:37

标签: java spring vaadin

我正在使用需要实现简单登录系统的Vaadin 8和Spring Boot / Spring Data编写应用程序。我在PostgreSQL中有一个托管用户详细信息的表,并且登录时我想通过使用存储过程将密码检查移动到数据库端。

事情是,我有以下类来处理身份验证:

public class Authentication {

@Autowired
private JdbcTemplate jdbcTemplate;

public Boolean authenticate(String username, String password) {
    String passwordCheck =  "SELECT crypt(?, password) = password " +
            "FROM usuaris " +
            "WHERE usuari = ?;";

    PreparedStatementCallback<Boolean> psCallback = (ps) -> {
        ps.setString(1, password);
        ps.setString(2, username);

        return ps.execute();
    };

    return jdbcTemplate.execute(passwordCheck, psCallback);
   }
}

在登录对话框中使用它,如下所示:

public class LoginDialog extends Window {
    @Autowired
    Authentication auth;

   private void tryToLogIn() {
        if (auth.authenticate(username.getValue(), password.getValue())) {
            Notification.show("Login successful!", Notification.Type.HUMANIZED_MESSAGE);
        } else {
            Notification.show("Invalid credentials", Notification.Type.ERROR_MESSAGE);
        }
    }
}

当我尝试调试应用程序时,它会使用Autowired Authentication类在authenticate()方法中抛出NPE。

我尝试将Authentication类注释为@Component,@Autowiring一个setter而不是JdbcTemplate,并且一切都在失败。

有人知道我在这里可以缺少什么吗?

谢谢!

EDIT1:我已经检查了这个问题可能是重复的问题,并且我确保我没有将Authentication类创建为New。我也试过使用@Configurable注释,它仍然会抛出NPE。

我应该能够自动归类课程,为什么它仍然不起作用? 我忘了提到我试图在LoginDialog类中自动装配一个独立的JdbcTemplate,它仍然抛出一个NPE。

0 个答案:

没有答案