я получаю исключение, когда я начинаю мое заявление, где весна придраться UnsatisfiedDependencyException:Spring JPA не реализует/автоматического связывания хранилищу, несмотря на @EnableJpaRepositories аннотацию
Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'applicationConfig': Unsatisfied dependency expressed through field 'controlRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [com.oak.api.finance.repository.ControlRepository]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
Мое приложение организовано в следующем формате:
я объявил мой репозиторий интерфейсов, с соответствующими аннотациями JPA Spring:
@RepositoryRestResource(collectionResourceRel = "exchange", path = "exchanges") public interface ControlRepository extends PagingAndSortingRepository<Control, Long> { }
Я аннотированный
EntryPoint
класс, который содержит методmain
@SpringBootApplication @EntityScan(basePackages = {"com.oak.api.finance.model.dto"}) @EnableJpaRepositories(basePackages = {"com.oak.api.finance.repository"}) public class EntryPoint { public static void main(String[] args) { Logger logger = LogManager.getLogger(EntryPoint.class); logger.info("Starting application"); ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class); // SpringApplication.run(EntryPoint.class, args); ctx.getBean(ApplicationServer.class).start(); }
Я использовал
@Autowired
вводить свой репозиторий в моей пружинной конфигурации (Java на основе)ApplicationConfig
класс:@Autowired private ControlRepository controlRepository; @Autowired private CompanyRepository companyRepository; @Autowired private SectorRepository sectorRepository;
По существу Я хочу контролировать зависимость от Spring и ограничивать ее несколькими пакетами (репозитории, конфигурацию java и программу ent точка чень - EntryPoint)
Я предположил, что, указав @EnableJpaRepositories с пакетом, где мои хранилища расположены, весна будет создать прокси-сервер для моего репозитория и создается экземпляр этого, и что к тому времени я называю:
ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class)
экземпляры репозиториев будут присутствовать в Пуле фасоли и можно было бы autowire их в мой ApplicationConfig
контекст, а затем вводить их в мой контроллер.
Это явно не происходит, и Весна жалуется на отсутствие пропавшего Bean для автоустройства, но я не уверен, что мне не хватает.
Ниже снимок моих пакетов: любые идеи?
В каком пакете находится класс Control. Вы настроили функцию сканирования объектов.что мне кажется странным. –
Класс Control, а также остальные классы Entity находятся в: com.oak.api.finance.model.dto, dto - это место, где я помещаю все мои классы Entity. – Charbel
Добавить SpringApplication.run (EntryPoint.class); после регистрации и удаления части ApplicationContext. Затем убедитесь, что ваш класс ApplicationConfig аннотируется с @Configuration –