当前位置: 首页 > 知识库问答 >
问题:

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

欧阳哲
2023-03-14

我使用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注释指定的组件。

做我想做的事的正确方法是什么?

谢啦

共有3个答案

何烨华
2023-03-14

单独提供您的包名称,它需要一个String[]作为包名称。

而不是这样:

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

使用此选项:

@ComponentScan({"com.my.package.first","com.my.package.second"})
杨起运
2023-03-14

还有另一种类型安全的替代方法,可以将基本包位置指定为字符串。请参见此处的API,但我也在下面进行了说明:

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

在类引用中使用basePackageClasses说明符将告诉Spring扫描这些包(就像前面提到的替代方法一样),但这种方法既可以确保类型安全,又可以为将来的重构添加IDE支持,这在我的书中是一个巨大的优点。

Spring建议在您希望扫描的每个包中创建一个无操作标记类或接口,该类或接口除了用作此属性的引用之外,没有其他用途。

在我看来,我不喜欢marker类(但话说回来,它们与package info类非常相似),但类型安全、IDE支持以及大幅减少此扫描所需的基本包数量无疑是一个更好的选择。

常嘉平
2023-03-14

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

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

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

 类似资料:
  • 问题内容: 我正在使用Spring 3.1,并使用和属性引导应用程序。 实际的开始是 该配置类带有注释 而且效果很好。但是,我想更详细地说明我扫描的软件包,所以我尝试了。 但是,此操作失败,并显示错误消息,提示我找不到使用注释指定的组件。 做我追求的正确方法是什么? 谢谢 问题答案: @ComponentScan使用字符串数组,如下所示: 当您仅在一个字符串中提供多个包名称时,Spring会将其解

  • 问题内容: 我有几个需要用名称注释的类,因此我将注释定义为 现在,需要此注释的类定义为 我使用下面的代码来扫描注释 问题是返回的映射包含,但是我需要映射包含作为键,这是Annotation的值而不是bean名称。 有办法吗? 问题答案: 只需获取注释对象并提取值即可 让我知道是否不清楚。

  • 问题内容: 是否可以在一个方法上使用多个注释? Like : 问题答案: 有一个值参数,因此你应该能够指定多个值,如下所示:

  • 问题内容: 是否可以在一个方法上使用多个注释? 喜欢 : 问题答案: 有一个值参数,因此您应该能够指定多个值,如下所示:

  • 我正在尝试为我的iOS应用程序找到一种好方法来扫描三种不同类型的蓝牙LE外围设备,每种外围设备都由一个唯一的服务/UUID表示。CBCentralManager scanFor外围文件与服务:选项方法采用服务UUID数组,当提供时,留档状态为“中央管理器仅返回宣传您指定的服务的外围设备”。然而,我发现这实际上意味着,如果您指定3个服务UUID,您将只获得宣传所有三个服务的外围设备。即它是一个AND