我的项目如下设置。
如图所示,我有一个助手项目(带有2个@Autowired时钟),而我的主项目带有1个@Autowired时钟。这三个时钟都表示同一个对象。
启动应用程序时,出现错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为“ helper2”的bean时出错:不满意的依赖关系 通过字段“ clock”表示;嵌套异常为 org.springframework.beans.factory.NoSuchBeanDefinitionException:否 可用类型为“ java.time.Clock”的合格bean:至少预期 1个符合自动装配候选条件的bean。依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(required = true)} 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586) 〜[spring-beans-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”的合格bean:至少预期 1个符合自动装配候选条件的bean。依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(required = true)} 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1506) 〜[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) 〜[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
答案 0 :(得分:0)
Spring期望java.time.Clock
的实现的Bean定义能够自动装配。由于您已经将Clock.systemDefaultZone
的返回值公开为@Bean
,因此您唯一要做的就是将@Configuration
添加到MainConfig.java
并确保MainConfig
可以通过@ComponentScan
或@Import
正确地由Spring拾取。
答案 1 :(得分:-3)
您不能自动连接java.time.Clock,因为它不是Spring组件。弹簧组件是考虑用于自动检测的类。
我正在编辑我的回复,但是@ptikobj似乎已经很好地回答了这个问题。我还要补充一点,在类中添加@SpringBootConfiguration
而不是仅仅添加@Configuration
就已经可以处理组件了,因此就不需要了。