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

Spring排除过滤器

湛联
2023-03-14
<context:component-scan base-package="com.myApp">
        <context:exclude-filter type="assignable" expression="com.myApp.MyService"/>
</context:component-scan>

<bean id="myService" class="com.myApp.ExtendedService" />
@SpringBootApplication
@ImportResource(locations = {"classpath:application-context.xml"})
public class Main{
    //...
}

ExtendedService内部:

@Service
public class ExtendedService extends MyService{
    //...
}

但是当我开始时,我得到无效的Bean定义,因为myService是绑定错误。如何排除原来的MyService?

例外情况:

原因:org.springframework.beans.factory.support.beandefinitionoverrideException:URL[file:svc.xml]中定义的名为“My Service”的bean定义无效:无法注册bean定义[Generic bean:class[com.myapp.extendedservice];scope=;abstract=false;lazyInit=false;autowiremode=1;dependencycheck=0;autowirecandidate=true;primary=false;factorybeanname=null

共有1个答案

令狐经武
2023-03-14

@SpringBootApplication正在对相同(和子)包进行包扫描。这是@Configuration@EnableAutoConfiguration@ComponentScan的等价物。如果你不想要一个包裹扫描,你可以用其他两个代替。

@Configuration
@EnableAutoConfiguration
@ImportResource(locations = {"classpath:application-context.xml"})
public class Main{
    //...
}

编辑:您可以在ExtendedService上使用@primary,上下文将使用这个而不是MyService,那么您就不需要在扫描中排除了。只有当MyService不是主服务时,此操作才有效。

@Primary
@Service
public class ExtendedService extends MyService{
    //...
}

编辑2:不能使用assignable exlude,因为两个服务都可以使用regex分配给MyService。

<context:exclude-filter type="regex" expression="com.myApp.MyService"/>
 类似资料:
  • 问题内容: 我需要返回不包含具有特定ID的文档的结果。Elasticsearch允许我们指定允许使用哪些ID,但是我看不到任何禁止某些ID的方法。在我的情况下,我不想返回用户已经看到的内容,因此每个用户的列表都不同。 问题答案: 您可以通过添加一个过滤器来实现此目的,该过滤器包含一个过滤器,该过滤器带有您不想显示的ID数组,如下所示:

  • 问题内容: 有什么办法可以使过滤器映射不包括子目录? 例如。 我的上下文根目录中有.xhtml文件,并且我还有一个名为“ test”的子文件夹,其子文件夹具有相同的扩展名。是否可以将过滤器映射到上下文根目录中的文件,而不映射到“ test”目录中的文件? 问题答案: 该是匹配确实是限制。它仅允许精确,前缀或后缀匹配。不是中间/整体/正则表达式匹配。因此,例如,您打算做的事情行不通。 如果只想在文件

  • 问题内容: 我想过滤出字段“ A”等于“ a”的文档,并且我想同时考虑字段“ A”,当然不包括先前的过滤器。我知道您可以将过滤器“置于查询之外”,以便在不应用该过滤器的情况下获得构面,例如: elasticsearch 单反 这非常好,但是如果我有多个滤镜和构面,每个滤镜和构面应该互相排斥,会发生什么?例: 也就是说,对于方面AI,希望保留除A:a以外的所有过滤器,对于方面B希望保留除B:b以外的

  • 当我调用我的服务时,我的这个URL: 我有这个堆栈跟踪: 什么是平均健康有一个空的筛选器列表?

  • 问题内容: 我们添加到我们现有的项目中。 从这一刻起,我们从服务器收到401 错误。 这是因为没有标头附加到响应。为了解决这个问题,我们Filter在退出过滤器之前的链中添加了我们自己的过滤器,但是该过滤器不适用于我们的请求。 我们的错误: XMLHttpRequest无法加载。所请求的资源上不存在“ Access-Control-Allow-Origin”标头。http://localhost: