java - 如何使用 @ComponentScan 注释扫描多个路径?

我使用spring 3.1,并使用@Configuration和@ComponentScan属性引导一个应用程序。

实际开始是用它完成的


new AnnotationConfigApplicationContext(MyRootConfigurationClass.class);

这个配置类的注释为


@Configuration
@ComponentScan("com.my.package")
public class MyRootConfigurationClass

这个可以工作的很好,但是,我想要更具体地描述一下我扫描的软件包。


@Configuration
@ComponentScan("com.my.package.first,com.my.package.second")
public class MyRootConfigurationClass

然而,出现了错误,错误告诉我它找不到使用@Component注释指定的组件。

正确方法是什么?

谢谢

时间:

@ComponentScan使用字符串数组,如下所示:


@ComponentScan({"com.my.package.first","com.my.package.second"})

当你只在一个字符串中提供多个包名时,Spring会将它解释为一个包名,因此无法找到它。

请分别提供软件包名称,软件包名称需要String[]

而不是这个:


@ComponentScan("com.my.package.first,com.my.package.second")

使用这个:


@ComponentScan({"com.my.package.first","com.my.package.second"})

还有另一个 type-safe 替代指定base-package位置为字符串。 查看这里的API,但我也在下面举例说明:


@ComponentScan(basePackageClasses = {ExampleController.class, ExampleModel.class, ExmapleView.class})

你的类引用使用 basePackageClasses说明符会告诉 spring ( 就像前面提到的) 扫描这些包,但是这种方法既 type-safe并添加ide支持未来重构 --巨大的加在我的书中。

从API中读取,spring 建议在每个要扫描的包中创建一个no-op标记类或者接口,该类没有用作这里属性的引用。

IMO,我不喜欢 marker-classes ( 但同样,它们非常像package-info类),但类型安全,IDE支持,大大减少了这个扫描需要包括的基本软件包,有一个更好的选项。

...