【问题标题】:Spring annotation-based container configuration context:include & exclude filtersSpring基于注解的容器配置上下文:包含&排除过滤器
【发布时间】:2011-01-03 12:41:36
【问题描述】:

首先我指向类似的question。我花了一个多小时来设置它,但 PathMatchingResourcePatternResolver 仍然会扫描所有内容。

我有一个 common.xml(从 specific.xml 导入)和一个 specific.xml bean 定义文件。上下文是从 specific.xml 加载的。 common.xml 中有这个元素:

<context:component-scan base-package="cz.instance.transl">
   <context:exclude-filter type="aspectj" 
        expression="cz.instance.transl.model..* &amp;&amp; cz.instance.transl.service..* &amp;&amp; cz.instance.transl.hooks..*"/>   
   </context:component-scan>

像 cz.instance.transl.service.* 这样的包中的类不应被扫描,但 cz.instance.transl.* 中的所有其他内容都应该被扫描。但是 PathMatchingResourcePatternResolver 将所有内容标记为匹配资源。正则表达式也是如此。

已编辑:如果我在 specific.xml 中声明 context:component-scan,则扫描甚至不会开始,并且我会在 common.xml 中基于注释的依赖项上获得 NoSuchBeanDefinitionException。

顺便说一句:在 xml 样式配置中,在加载上下文时,可以有许多组件通过“导入资源”共享一个 common.xml bean。当使用基于注解的容器配置时如何做到这一点?

【问题讨论】:

    标签: spring configuration


    【解决方案1】:

    在这种情况下,您需要“或”而不是“和”:

    <context:exclude-filter type="aspectj"
         expression="cz.instance.transl.model..* || cz.instance.transl.service..* || cz.instance.transl.hooks..*"/>       
    

    【讨论】:

    • 仍在扫描所有内容。这对我来说没有意义,我需要排除所有这三个包。 “排除这个或这个或这个真的很令人困惑:-)
    • @lisak:排除过滤器不排除包,它排除类。上面写着:如果类属于这个包或那个包,则排除它。
    • “导入资源”存在问题,因为似乎 context:component-scan 适用于具有 bean 定义的特定 xml,并且导入的资源中是否存在未声明的依赖项,它在 NoSuchBeanDefinitionException 上失败
    • 当然它排除了类 :-) 说“排除包”比说“从包中排除类”更容易,恕我直言,意思是一样的
    • @lisak:我不明白你对导入资源的问题。是否清楚这些过滤器应用于component-scan 发现的带注释的类,而不是手动声明的bean。
    猜你喜欢
    • 2018-12-28
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2018-11-16
    • 2018-02-13
    • 2021-02-25
    相关资源
    最近更新 更多