我有一个源项目,这里有一些代码
@Configuration
public class AnalyzeSyntaxServiceConfig {
@Bean
public AnalyzeSyntaxService analyzeSyntaxService() {
return new AnalyzeSyntaxService();
}
}
并在像这样的源项目中使用它
@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;
效果很好
然后我将其打包为jar文件,并将其作为pom.xml
中的依赖项添加到目标项目中,并尝试以相同的方式使用上述服务
@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;
但它是空的,为什么?
答案 0 :(得分:1)
源代码和使用/依赖代码库之间的包名称是否不同?
Spring Boot应用程序将从放置SpringBootApplication
的包和任何子包扫描。
如果您在同一个项目中拥有它,并且您的配置类的结构使其位于同一个包或子包中,例如
com.myapp
或com.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")
另外,看看是否有任何机会将具有此自动装配的类实例化。如果该类是即时的,则自动装配的类将为空。