spring boot配置自动装配不能用作依赖项

时间:2017-08-03 16:40:25

标签: java spring maven spring-boot autowired

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

@Configuration
public class AnalyzeSyntaxServiceConfig {

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

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

@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;

效果很好

然后我将其打包为jar文件,并将其作为pom.xml中的依赖项添加到目标项目中,并尝试以相同的方式使用上述服务

@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;

但它是空的,为什么?

2 个答案:

答案 0 :(得分:1)

源代码和使用/依赖代码库之间的包名称是否不同?

Spring Boot应用程序将从放置SpringBootApplication的包和任何子包扫描。

如果您在同一个项目中拥有它,并且您的配置类的结构使其位于同一个包或子包中,例如

com.myappcom.myapp.configs将对其进行扫描和拾取。

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

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

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

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

另外,我建议使用构造函数。注入这将避免Autowired依赖项为null并在initContext上而不是在运行时通知您。

答案 1 :(得分:0)

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

@ComponentScan("com.abc.xyz")

另外,看看是否有任何机会将具有此自动装配的类实例化。如果该类是即时的,则自动装配的类将为空。