Читая о создании пользовательских запросов в Spring , я заметил, что ни один из классов (UserRepositoryCustom
, UserRepositoryCustomImpl
, UserRepository
) не использует аннотацию @Repository
.
Я был удивлен этим, потому что обычно все классы приложений Spring аннотированы чем-то, что их обнаруживает, и для них создается прокси.Вот как работает аспектно-ориентированная среда в Java.
Затем я проверил свой старый рабочий код и понял, что мой интерфейс репозитория также не использует аннотацию.Тем не менее, это @Autowired
как зависимость от контроллеров и других классов, которые его используют.Пример:
// AddressRepository.java
public interface AddressRepository extends CrudRepository<Address, String> {
}
// Repositories.java
@Getter // lombok
@Component
public class Repositories { // autowire this to have access to all repo's
private final AddressRepository addressRepository;
@Autowired
public Repositories(AddressRepository addressRepository) {
this.addressRepository = addressRepository;
}
}
Возникают вопросы: Когда следует использовать аннотацию? и Почему неаннотированный класс автоматически обнаруживается при сканировании компонентов Spring?