繁体   English   中英

如何在applicationContext中从Spring中排除一个类?

[英]How to exclude a class from Spring in applicationContext?

在这里,我们只想从某个类路径中排除一个类,比方说

com.abc.projectA.service.orderService.sectionA.orderService.class

但是,有另一个具有相同名称但在不同类路径中的类

com.abc.projectA.service.orderService.sectionB.orderService.class

这样只有按类名称的文件管理器才能生效。

但我尝试了以下方法:

<context:component-scan base-package="com.abc">
    <!--other filters-->
    <!--.......-->
    <context:exclude-filter expression="projectA\.service\.orderService\.sectionA\.orderService" type="regex" />
</context:component-scan>

它不起作用。 所以我敢打赌<context:exclude-filter>仅在包级别有效,但对特定类没有效? 如果是这样,如何从bean注入中排除一个类,以便我们可以选择类来连接相同的类名?

提前致谢。

不,排除应该有效,你遇到的问题可能就是你假设正则表达式中的路径将被预先设置为不正确的基础包。所以只需指定完整的包

<context:component-scan base-package="com.abc">
    <!--other filters-->
    <!--.......-->
    <context:exclude-filter expression="com\.abc\.projectA\.service\.orderService\.sectionA\.orderService" type="regex" />
</context:component-scan>

在设置bean时,应该包括类的完整包位置,以便具有重复名称的类永远不会成为问题。 例如:

<bean id="orderServiceA" class="com.foo.bar.a.OrderService">

<bean id="orderServiceB" class="com.foo.barr.b.OrderService">

现在你可以同时拥有两个并且不会遇到任何问题。 也许我错过了一些东西,但我不明白为什么你需要消除一个类,因为它与另一个类中的另一个类具有相同的名称。 我的意思是Java SDK有多个名为List的类,它永远不会导致问题。

在我看来,您正试图打破Java规范中描述的唯一包名称约定:第7.7节

或者您是否尝试加载相同类的不同版本? 您的类加载器可能无法消除歧义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM