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

在@componentscan中筛选特定的包

柯树
2023-03-14

我想在Spring中从基于XML的配置切换到基于Java的配置。现在我们在应用程序上下文中有如下内容:

<context:component-scan base-package="foo.bar">
    <context:exclude-filter type="annotation" expression="o.s.s.Service"/>
</context:component-scan>
<context:component-scan base-package="foo.baz" />
 @ComponentScan(
    basePackages = {"foo.bar", "foo.baz"},
    excludeFilters = @ComponentScan.Filter(
       value= Service.class, 
       type = FilterType.ANNOTATION
    )
 )

...它将从两个包中排除服务。我有一种强烈的感觉,我忽略了一些令人尴尬的琐碎事情,但我找不到一种解决方案来将过滤器的范围限制在foo.bar

共有1个答案

欧阳鸿德
2023-03-14

您只需为所需的两个@componentscan注释创建两个config类。

例如,您可以为foo.bar包设置一个config类:

@Configuration
@ComponentScan(basePackages = {"foo.bar"}, 
    excludeFilters = @ComponentScan.Filter(value = Service.class, type = FilterType.ANNOTATION)
)
public class FooBarConfig {
}

然后是第二个foo.baz包的config类:

@Configuration
@ComponentScan(basePackages = {"foo.baz"})
public class FooBazConfig {
}
new AnnotationConfigApplicationContext(FooBarConfig.class, FooBazConfig.class);

另一种选择是,您可以使用第一个config类上的@org.springframework.context.annotation.import注释来导入第二个config类。例如,您可以将foobarconfig更改为:

@Configuration
@ComponentScan(basePackages = {"foo.bar"}, 
    excludeFilters = @ComponentScan.Filter(value = Service.class, type = FilterType.ANNOTATION)
)
@Import(FooBazConfig.class)
public class FooBarConfig {
}

然后,您可以简单地以以下内容开始您的上下文:

new AnnotationConfigApplicationContext(FooBarConfig.class)
 类似资料:
  • 问题内容: 我想在Spring中从基于XML的配置切换为基于Java的配置。现在,我们的应用程序上下文中具有以下内容: 但是如果我写这样的话… …它将从这两个软件包中排除服务。我有一种强烈的感觉,我正在尴尬地忽略一些琐碎的事情,但是找不到解决方案来将过滤器的范围限制为。 问题答案: 你只需要为所需的两个注释创建两个类。 因此,例如,你的包装将有一个类: 然后是你的包裹的二等舱: 然后在实例化Spr

  • 我知道关于这个问题有很多类似的问题,但是,没有一个解决了我的问题。我有一个Spring REST项目,我正在使用Spring Tool Suite(STS)3.5.1版本。 应用程序类: 这是当我尝试使用Spring Boot应用程序运行项目时得到的部分切除。

  • 我还有这个包含ID列表: 我想筛选以便筛选的不包含id来自的对象,因此我尝试使用stream: 我找不到做这件事的正确函数。有人有什么建议让我试试吗?

  • 问题内容: 我想筛选一个像这样的选择: 编辑:添加列模型: 列用于多种用途,并且为了优化我的代码,我需要将其也包含在Select中,但没有类型为“字段”或“映射”的条目 但是,我可以从所有内容中进行选择,甚至包括类型为“字段”和“地图”的条目。有没有一种清洁的方法? 问题答案: AngularJS NOT过滤器 小提琴 从 文档 : “ …谓词可以通过在字符串前面加上!来取反。” “模式对象可用于

  • 我需要wireshark的捕获筛选器,该筛选器将匹配UDP负载中的两个字节。我见过 作为匹配标准,但没有对语法的解释,而且我在任何wireshark wiki中都找不到它(大海捞针)。

  • 我有一个实体,其中一个字段是 我需要得到所有的时间表项目,其中的集合包含一个特定的组(集合可以有很多不同的组也。如果“我的组”是其中之一-它是我需要的)。 如果在没有任何条件的情况下运行代码,我可以在调试器中看到我的包含数据库中的所有项,并且每个项都包含中的组。 截图 当然,我可以“手动”找到我需要的项(例如,使用.stream()),但我肯定有一些方法可以使用谓词来获得它。