2017-08-03 159 views
-2

工作,我有一个开源项目,这里有一些代码春季启动配置自动装配Autowired不作为依赖

@Configuration 
public class AnalyzeSyntaxServiceConfig { 

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

,并用它在源项目这样

@Autowired 
private AnalyzeSyntaxService analyzeSyntaxService; 

效果很好

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

@Autowired 
private AnalyzeSyntaxService analyzeSyntaxService; 

但它是空的,为什么?

+0

你的配置扫描'AnalyzeSyntaxServiceConfig'软件包? –

+0

我认为它可以,因为它在源项目中效果很好 –

+0

您是否使用Spring注册了'AnalyzeSyntaxServiceConfig'? – phani

回答

1

包名称在源代码和消费/从属代码库之间是不同的?

Spring Boot应用程序将从包中放入SpringBootApplication和任何子包。

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

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

将其导入到不同的项目中时,需要通过@ComponentScan批注手动对组态进行组态扫描,并为其提供一个包以扫描您的配置。

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

由于JacksonConfig.class是在亲本(不同的)打包ComponentScan不起作用。应用程序类扫描com.darrenforsythe.mixinabstractclass及其子包中的所有内容。要使Spring Boot扫描JacksonConfig,我们必须明确并将@ComponentScan("com.darrenforsythe")添加到应用程序中。

如果取消对@ComponentScanMixinasbtractclassApplication内的测试,然后再通过,因为它会再次加载JacksonConfig

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

+0

感谢您的快速响应,你可以添加一些代码的详细? –

+0

我同意,但我不明白_I我会建议使用教练注射_你能解释吗? –

+0

@DavidPérezCabrera错字:)意思构造函数注入:) 也更新了一个在git中的工作示例。 –

0

确保扫描可用类的包。这里是注释,把这个注释放在SpringBoot应用程序类中。

@ComponentScan("com.abc.xyz") 

此外,看看是否有任何机会有这个自动装配的类正在实例化。如果该类是即时的,那么自动装配的类将为空。

相关问题