7

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

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 注入中排除一个类,以便我们可以选择类以使用相同的类名连接?

提前致谢。

4

3 回答 3

15

不,排除应该可以工作,您遇到的问题可能是您假设正则表达式中的路径将预先添加不正确的基本包..所以只需指定完整包

<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>
于 2012-10-23T16:03:27.563 回答
0

当您设置 bean 时,您应该包括类的完整包位置,这样具有重复名称的类就不会成为问题。例如:

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

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

现在你可以两者兼得,不会遇到任何问题。也许我遗漏了一些东西,但我不明白为什么你需要消除一个类,因为它与不同包中的另一个类具有相同的名称。我的意思是 Java SDK 有多个名为 List 的类,它永远不会引起问题。

于 2012-10-23T15:58:29.150 回答
0

在我看来,您试图打破Java Spec: section 7.7中描述的唯一包名称约定。

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

于 2012-10-23T16:03:02.800 回答