spring 引导配置自动装配不能作为依赖项工作

spring boot Configuration autowired doesn't work as dependency

我有一个源项目,这里有一些代码

@Configuration
public class AnalyzeSyntaxServiceConfig {

    @Bean
    public AnalyzeSyntaxService analyzeSyntaxService() {
        return new AnalyzeSyntaxService();
    }
}

并像这样在源项目中使用它

@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;

效果很好

然后我把它打包成一个jar文件,并在pom.xml中作为依赖添加到目标项目中,同样我尝试使用上面的这个服务

@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;

但是它是空的,为什么?

源代码和 consuming/dependent 代码库的包名称是否不同?

A Spring 引导应用程序将从放置 SpringBootApplication 的包和任何子包进行扫描。

如果您在同一个项目中使用它,并且您的配置 class 的结构是在同一个包或子包中,例如

com.myappcom.myapp.configs将被扫描并拾取。

将它导入到不同的项目时,您需要通过 @ComponentScan 注释手动组件扫描配置,并为其提供一个包来扫描您的配置。

https://github.com/Flaw101/springbootmixin/tree/example/componentscanning

因为 JacksonConfig.class 在父(不同)包中,所以 ComponentScan 不起作用。应用程序 class 扫描 com.darrenforsythe.mixinabstractclass 中的所有内容及其子包。要使 Spring 引导扫描 JacksonConfig,我们必须明确并将 @ComponentScan("com.darrenforsythe") 添加到应用程序。

如果您在 MixinasbtractclassApplication 中取消注释 @ComponentScan,则测试会再次通过,因为它将再次加载 JacksonConfig

此外,我建议使用构造函数。注入这将避免 Autowired 依赖项为空,并在 ApplicationContext 的初始化时而不是在运行时通知您。

确保扫描了 class 可用的包。这是注释,将此注释放在 SpringBoot 应用程序 class.

@ComponentScan("com.abc.xyz")

此外,看看是否有机会实例化具有此自动装配的 class。如果 class 被实例化,那么自动装配的当然将为空。