我使用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
然而,这失败了,错误消息告诉我它找不到使用@Component
注解指定的组件。
做我想做的事的正确方法是什么?
谢谢
9条答案
按热度按时间42fyovps1#
@ComponentScan使用字符串数组,如下所示:
当您在一个字符串中提供多个包名时,Spring会将其解释为一个包名,因此无法找到它。
ix0qys7i2#
还有另一个类型安全的*替代方法 * 可以将基本包的位置指定为String。请参阅这里的API,但我也在下面进行了说明:
在类引用中使用basePackageClasses说明符将告诉Spring扫描这些包(就像前面提到的 * alternative * 一样),但是这个方法既是类型安全的,又为将来的重构添加了IDE支持-这在我的书中是一个巨大的优势。
从API中阅读,Spring建议在您希望扫描的每个包中创建一个no-op标记类或接口,该标记类或接口除了用作该属性的引用之外没有其他用途。
我不喜欢标记类 (但话又说回来,它们很像包信息类),但类型安全、IDE支持和大幅减少此扫描所需的基本包数量无疑是一个更好的选择。
qzwqbdag3#
单独提供您的包名,包名需要
String[]
。而不是这个:
使用此命令:
2guxujil4#
另一种方法是使用
basePackages
字段;这是ComponentScan注解内的字段。如果您查看jar文件中的ComponentScan annotation.class,您将看到一个basePackages字段,它接受一个String数组
型
或者你也可以显式地提到类。它接受类的数组
nxagd54h5#
您可以使用ComponentScan扫描多个软件包
@ComponentScan({"com.my.package.first","com.my.package.second"})
apeeds0o6#
您还可以使用@ComponentScans注解:
ltqd579y7#
我用途:
xcitsw888#
确保您已经在pom.xml中添加了此依赖项
sczxawaw9#
用途
在上课前在顶部定义它。