(Java Spring WebApp)
我有:
public class PersonValidator implements Validator {
private PersonDAO d;
@Autowired
public void setD(PersonDAO d) {
this.d = d;
}
public void validate(Object target, Errors errors) {
\\ some logic
d.emailAlreadyExists("testMail@test.test");
}}
我以为我真的很了解豆子和自动装配 - 似乎没有。 “d.email ..”代码抛出空指针异常,它确实使用PersonDAO d的任何方法。据我所知,问题在于没有注入任何东西。
但是,如果我尝试将它注入使用此Validator的控制器,则一切正常:
@Controller
@RequestMapping("/person")
public class PersonController
{
private PersonDAO d;
@Autowired
public void setD(PersonDAO d) {
this.d = d;
}
// some method with RequestMapping declaration {
Boolean b = d.emailAlreadyExists(person.getMail());
logger.info( b.toString());
// } end some method
虽然上面的代码不是我想要的。 我想将我的DAO注入PersonValidator,因为一些DAO的方法需要对db进行检查。这样它就可以按照以下方式工作:
\\ these lines are in Controller under method
PersonValidator validator = new PersonValidator(); // my d.emailAlreadyExists("testMail@test.test"); is inside
validator.validate(person, bindingResult);
PersonDAO在xml中声明,但PersonValidator不在。我不能将Spring DAO bean注入到简单的java对象中,例如PersonValidator,它在xml中没有被删除吗?
(顺便说一下,组件扫描是好的 - 以防万一)
答案 0 :(得分:1)
如果您正在对包含PersonValidator
的包进行组件扫描,则只需在@Component
类之上添加PersonValidator
注释即可:
@Component
public class PersonValidator implements Validator {
根据您的需要,您可能还想更改单身默认范围:
@Component
@Scope("prototype")
public class PersonValidator implements Validator {
或者,您可以在Spring XML中声明PersonValidator
。如果你不做这两件事中的一件事,Spring甚至都不会考虑你的对象,所以没有任何东西可以在其中自动装配。