Автоматическое подключение часов по проектам вызывает исключение «Не найден такой компонент» - PullRequest
0 голосов
/ 04 октября 2018

Мой проект настроен, как показано ниже.

enter image description here

Как показано на диаграмме, у меня есть вспомогательный проект (с 2 @Autowired clock), имой основной проект с 1 @Autowired clock.Все три часа означают один и тот же объект.

Когда я запускаю приложение, я получаю сообщение об ошибке:

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания компонента сname 'helper2': Неудовлетворенная зависимость, выраженная через поле 'clock';Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'java.time.Clock': ожидается как минимум 1 компонент, который считается кандидатом на автоматическое подключение.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательный = true)} в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (Autowiredevan [-5.0.8.RELEASE.jar: 5.0.8.RELEASE] в org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:91)

.

.

.

.

~ [spring-beans-5.0.8.RELEASE.jar: 5.0.8.RELEASE] Причина: org.springframework.beans.factory.NoSuchBeanDefinitionException: не доступен квалифицирующий компонент типа 'java.time.Clock': ожидается как минимум 1 компонент, который считается кандидатом в autowire.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательный = true)} в org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound (DefaultListableBeanFactory_setup_6.0).8.RELEASE.jar: 5.0.8.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1101) ~ [spring-beans-5.0.8.RELEASE.jar 5.0.8. ВЫПУСК]

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Spring ожидает, что Бин определит реализацию java.time.Clock, чтобы иметь возможность его автоматического подключения.Поскольку вы уже выставляете возвращаемое значение Clock.systemDefaultZone как @Bean, единственное, что вам нужно сделать, это добавить @Configuration к вашему MainConfig.java и убедиться, что Spring правильно выбрал MainConfig, либо с помощью @ComponentScan или @Import.

0 голосов
/ 04 октября 2018

Вы не можете автоматически подключить java.time.Clock, поскольку он не является компонентом Spring.Компонент Spring - это класс, предназначенный для автоматического определения.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html

Я редактировал свой ответ, но, похоже, @ptikobj уже хорошо ответил на вопрос.Я бы добавил к этому, что добавление @SpringBootConfiguration в класс вместо просто @Configuration будет обрабатывать компоненты уже, поэтому в этом не будет необходимости.

...