Итак, я использую 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.




вы должны убедиться, что Аутентификатор также является Spring bean - я имею в виду, что вы должны аннотировать его чем-то вроде @Component или @Service. После этого шага вам также нужно будет «получить» экземпляр Аутентификатор из Spring вместо того, чтобы создавать его с ключевым словом новый.
После избавления от получения Authentificator путем создания его экземпляра с помощью новый теперь он работает отлично.
ах, вот и все :)
Если вы хотите, чтобы Spring внедрил поле в объект Authenticator, зависимый объект также должен быть создан Spring. Вы можете сделать это, пометив этот класс как @Component или создав метод с возвращаемым типом Authenticator, помеченный аннотацией @Bean. Потом его нужно куда-то уколоть.
@Autowired работает только с контекстом Spring. Это означает, что он будет работать только с экземплярами классов, которыми управляет Spring. Ваш класс Authentificator управляется вами, и Spring не должен заботиться о нем или знать об этом, это не важно для Java Framework.
Это скорее проблема конфигурации, чем проблема аннотации.
Кажется, что Authenticator - это не компонент Spring. Это? Как получить его экземпляр? Spring только автоматически подключает зависимости в Spring beans, которые должны быть созданы Spring.