跨项目自动装配时钟会导致“未找到此类豆”异常

时间:2018-10-04 13:14:38

标签: java spring spring-boot exception autowired

我的项目如下设置。

enter image description here

如图所示,我有一个助手项目(带有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]

2 个答案:

答案 0 :(得分:0)

Spring期望java.time.Clock的实现的Bean定义能够自动装配。由于您已经将Clock.systemDefaultZone的返回值公开为@Bean,因此您唯一要做的就是将@Configuration添加到MainConfig.java并确保MainConfig可以通过@ComponentScan@Import正确地由Spring拾取。

答案 1 :(得分:-3)

您不能自动连接java.time.Clock,因为它不是Spring组件。弹簧组件是考虑用于自动检测的类。

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

我正在编辑我的回复,但是@ptikobj似乎已经很好地回答了这个问题。我还要补充一点,在类中添加@SpringBootConfiguration而不是仅仅添加@Configuration就已经可以处理组件了,因此就不需要了。