ComponentScan和Autowired不适用于依赖Spring项目?

时间:2016-02-09 20:10:08

标签: spring spring-boot autowired component-scan

我有两个项目A和B.两个都是用Maven构建的,而项目A对项目B有一个Maven依赖项。两个项目都有一个带有@Configuration注释的类,我定义了@Beans。

我在项目A中都有来自两个项目的bean。如果我在同一项目中定义的bean的项目A中使用@Autowired注释,则自动装配将起作用。但是,如果我在项目B的bean的项目A中使用@Autowired注释,我将得到一个例外。

这是什么意思?如何在项目A中自动装配bean,这是在项目B中定义的?

1 个答案:

答案 0 :(得分:3)

这通常是ComponentScan上基类路径的问题。

例如,如果你有以下基础包

com.myproject.a

com.myproject.b

分别在你的项目A和B中,你将SpringBoot与主类一起使用

package com.myproject.a

@Configuration 
@EnableAutoConfiguration 
@ComponentScan
class MyApp {
    // Some public static void main ... 
}

它只会在com.myproject.a包中找到你的类及其子类。

要解决此问题,您必须以扫描两个包结构的方式增强@ComponentScan,例如。

package com.myproject.a

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = {"com.myproject.a", "com.myproject.b"} 
// or basePackages = "com.myproject" in this example
class MyApp {
    // Some public static void main ... 
}