Spring @Autowired не работает в некоторых классах - PullRequest
0 голосов
/ 23 ноября 2018

Так что я использую Spring для доступа к моей БД и получения пользователей на основе различных свойств.С @Restcontroller я получаю данные.Я создал UserRepository, который расширяет CrudRepository.

import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User, Integer> {
Iterable<User> findByNachname(String nachname);

    Iterable<User> findByRolle(Rolle rolle);

    Optional<User> findByBenutzername(String benutzername);

    @Transactional
    String deleteByBenutzername(String benutzername);
}

Я использую @Autowire для получения экземпляра UserRepo в моем классе контроллеров

@RestController
public class LoginController {
    @Autowired
    private UserRepository userRepository;
}

Это прекрасно работает во всех контроллерахя имею.Но теперь, когда я пытаюсь сделать то же самое в другом классе, экземпляр userRepository имеет значение null.

public class Authentificator {
    @Autowired
    private UserRepository userRepository;
}

Authentificator и LoginController не находятся в одном пакете.Но оба они не находятся в одном пакете с UserRepo.

  • project
    • UserRepo-package
    • Controller-Package
    • Authentificator-Пакет

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Если вы хотите, чтобы Spring вставлял поле в Authenticator объект, Spring должен также создать зависимый объект.Вы можете сделать это, пометив этот класс как @Component или создав метод с Authenticator типом возврата, помеченным @Bean аннотацией.Тогда это должно быть куда-то введено.

0 голосов
/ 23 ноября 2018

@Autowired работает только с контекстом весны.Это означает, что он будет работать только с экземплярами классов, которые управляются Spring.Ваш Authentificator класс управляется вами, и Spring не должен заботиться или знать об этом, это не важно для Java Framework.

Это скорее проблема конфигурации, а не проблема аннотаций.

0 голосов
/ 23 ноября 2018

вы должны убедиться, что Authentificator также является пружинным компонентом - я имею в виду, что вы должны аннотировать его чем-то вроде @Component или @Service.После этого шага вам также придется «получить» экземпляр Authentificator из Spring вместо того, чтобы создавать его с ключевым словом new .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...