如何使用@ComponentScan注释扫描多个path?
我正在使用Spring 3.1并使用@Configuration和@ComponentScan属性来引导应用程序。 
实际的开始是完成的
 new AnnotationConfigApplicationContext(MyRootConfigurationClass.class); 
此configuration类使用注释
 @Configuration @ComponentScan("com.my.package") public class MyRootConfigurationClass 
这工作正常。 不过,我想更具体的扫描包,所以我试过。
 @Configuration @ComponentScan("com.my.package.first,com.my.package.second") public class MyRootConfigurationClass 
 然而,这个失败告诉我,它无法find使用@Component注释指定的组件。 
什么是正确的方式来做我所追求的?
谢谢
@ComponentScan使用string数组,如下所示:
 @ComponentScan({"com.my.package.first","com.my.package.second"}) 
当你只在一个string中提供多个包名时,Spring会将其解释为一个包名,从而找不到它。
还有另一种types安全的 替代方法来将基本包位置指定为string。 在这里看到的API ,但我也已经说明如下:
 @ComponentScan(basePackageClasses = {ExampleController.class, ExampleModel.class, ExmapleView.class}) 
在你的类引用中使用basePackageClasses说明符会告诉Spring去扫描这些包(就像上面提到的select一样 ),但是这种方法既是types安全的,又为未来的重构添加了IDE支持 – 这是我的书中的一个很大的优点。
从API中读取,Springbuild议在您希望扫描的每个包中创build一个无操作的标记类或接口,除了用作此属性的参考外,其他用途除外。
国际海事组织,我不喜欢标记类(但是,然后再次,他们几乎就像包信息类),但types安全,IDE支持,并大幅减less基本包所需包含的扫描数量毫无疑问,这是一个更好的select。
 单独提供您的软件包名称,它需要一个String[]作为软件包名称。 
而不是这个:
 @ComponentScan("com.my.package.first,com.my.package.second") 
用这个:
 @ComponentScan({"com.my.package.first","com.my.package.second"}) 
 另一种方法是使用basePackages字段; 这是ComponentScan注释中的一个字段。 
 @ComponentScan(basePackages={"com.firstpackage","com.secondpackage"}) 
如果您从jar文件中查看ComponentScan注释.class,您将看到一个basePackages字段,它接受一个string数组
 public @interface ComponentScan { String[] basePackages() default {}; } 
您可以使用ComponentScan扫描多个软件包
 @ComponentScan({"com.my.package.first","com.my.package.second"})