java - Spring 不会注入(inject) JPARepository bean

标签 java spring spring-mvc

@Repository
public interface LoginDao extends JpaRepository<Login, Integer> {
    Login findByLogin(String login);
}

validator

@Component
public class PasswordChangeValidator implements Validator {

private LoginDao loginDao;

@Override
public boolean supports(Class<?> aClass) {
    return PasswordChange.class.equals(aClass);
}

@Override
public void validate(Object o, Errors errors) {

    PasswordChange passwordChange = (PasswordChange) o;

            **// There is a null pointer here because loginDao is null** 
    Login login = loginDao.findByLogin(passwordChange.getLoginKey());


}

public LoginDao getLoginDao() {
    return loginDao;
}

@Autowired
public void setLoginDao(LoginDao loginDao) {
    **// There is a debug point on the next line and it's hit on server startup and I can
    // see the parameter us non-null** 
    this.loginDao = loginDao;
}
}

Controller

@Controller
@RequestMapping("api")
public class PasswordController {

    @Autowired
    PasswordService passwordService;

    @InitBinder("passwordChange")
    public void initBinder(WebDataBinder webDataBinder, WebRequest webRequest) {
        webDataBinder.setValidator(new PasswordChangeValidator());
    }   

    @RequestMapping(value = "/passwordChange", method = RequestMethod.POST)
    public @ResponseBody PasswordInfo passwordInfo(@RequestBody @Valid PasswordChange passwordChange)
            throws PasswordChangeException {
        return passwordService.changePassword(passwordChange.getLoginKey(), passwordChange.getOldPassword(), passwordChange.getNewPassword());
    }


}

我有上面列出的 Dao。这个相同的 dao bean 被注入(inject)到 @Service 注释的类中,但没有注入(inject)到 @Component 注释的 Validator 类中。好吧,不完全是在服务器启动时我可以看到 setter 方法被调用,但是当我尝试在方法中使用此变量时,该变量显示为 null。

有人发现我的配置有问题吗?请注意,loginDao bean 被注入(inject)到服务类中,因此 Context 配置良好。

最佳答案

那是你的问题

webDataBinder.setValidator(new PasswordChangeValidator());

Spring 只能管理它创建的 bean。在这里,您正在创建实例。而是将您的 bean 注入(inject) @Controller 并使用它。

@Inject
private PasswordChangeValidator passwordChangeValidator;
...
webDataBinder.setValidator(passwordChangeValidator);

关于java - Spring 不会注入(inject) JPARepository bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22717431/

相关文章:

java - 如何从 spring mvc 中的 Controller 类返回两个列表

java - hibernate referencedColumnNames 未映射到单个属性

spring - Thymeleaf 如果在字符串上

java - 如何从另一台服务器获取请求url到spring mvc Controller 中

java - 在 Spring.io 中获取 Tomcat StandardContext

java - 为复制的文件生成文件名

java - 使用 LayoutClickListener 终止替换组件

spring - 如何在请求上传期间处理客户端中止?

java - 如何判断文本中的某个单词是否无意义?

java - 在名称为 'appServlet' 的 DispatcherServlet 中找不到具有 URI [/myappname/] 的 HTTP 请求的映射