Autowired не работает? - PullRequest
       4

Autowired не работает?

0 голосов
/ 12 ноября 2011

(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.Как я понимаю, проблема в том, что ничего не вводится.

Однако, если я пытаюсь внедрить его на моем контроллере, который использует этот валидатор, все работает:

@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 - нет.Разве я не могу внедрить bean-компонент Spring DAO в простой Java-объект, такой как PersonValidator, который не удален в xml?

(между прочим, сканирование компонента в порядке - на всякий случай)

1 Ответ

1 голос
/ 12 ноября 2011

При условии, что вы выполняете компонентное сканирование для пакета, в котором содержится PersonValidator, достаточно добавить аннотацию @Component поверх класса PersonValidator:

@Component
public class PersonValidator implements Validator {

В зависимости отваши нужды вы также можете изменить одноэлементную область по умолчанию:

@Component
@Scope("prototype")
public class PersonValidator implements Validator {

В качестве альтернативы вы можете объявить свой PersonValidator в Spring XML.Если вы не выполните одно из этих двух действий, Spring даже не будет рассматривать ваш объект, и поэтому в нем ничего не будет автоматически подключено.

...