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

BeanNameAutoProxyCreator与导入配置之间的隐式依赖关系

严昊昊
2023-03-14

在我的公司,我们正在开发一个面向方面的跟踪拦截器,类似于debuginterceptor。我们正在配置CustomizableTraceInterceptor并使用BeannameAutoProxyCreator为AOP自动代理bean。

我们面临的问题是,当我们在配置中引入BeannameAutoProxyCreator时:

@Configuration
@Import(BConfig.class)
@EnableAspectJAutoProxy
public class AConfig {
    @Bean
    public static BeanNameAutoProxyCreator beanNameAutoProxyCreator() {
        BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator();
        beanNameAutoProxyCreator.setInterceptorNames(new String[] {DEBUG_INTERCEPTOR_NAME});
        beanNameAutoProxyCreator.setBeanNames(new String[] {BEANS_NAMES_EXPRESSION});
        return beanNameAutoProxyCreator;
    }
}

我们得到一个org.springframework.beans.factory.NoSuchBeanDefinitionException:没有[X]类型的限定bean,其中X是一个Resteasy代理。此Resteasy代理在bconfig中声明。

现在,如果我将Resteasy代理bean配置上移到AConfig,这个问题就解决了,@dependson也解决了这个问题。

我的问题是3:spring什么时候能够解决bean之间的依赖关系?为什么使用BeanNameAutoProxyCreator会改变这种行为?解决此问题的推荐方法是什么(BeanPostProcessor、@Dependson等)。

共有1个答案

魏宏邈
2023-03-14

静态BeannameAutoProxyCreator依赖于普通bean(可能是由于BEANS_NAMES_EXPRESSION)。因为它是静态的,所以它在任何其他bean之前加载/引导,特别是在bean处理@import之前。因此,在分析要处理哪些bean时,基本上还没有加载bconfig。这就是为什么当您将bean移动到aconfig或该bean的依赖项时,它会起作用的原因。

我可能会恢复使用BeanNameAutoProxyCreator,并依赖@EnableAspectJAutoProxy以及使用bean切入点的方面来附加所需的拦截器

@enableaspectjautoproxy旁边引入BeannameAutoproxyCreator还有另一个风险,由于两种不同的AOP策略/机制,它可能导致创建代理的代理。

 类似资料:
  • 1. 前言 本小节目的在于带领大家学习xml 文件配置,应用 xml 文件配置 IoC。 在第二节中我们通过一个入门工程简单的体验了一把 Spring 的使用。在第三节中梳理了一下 Spring 的工作流程。 可能大家有了一个初步认知,Spring 框架的工作脱离不了核心配置文件 applicationContext.xml。 在配置文件中我们目前只用到了一个 bean 标签,而它的作用大家也明白

  • 因此,自从添加新的Room android架构库以来,这种情况已经开始发生。我在AppDatabase_Impl没有过期时遇到问题,我通过在注释中添加kapt来修复它: < li>Android Room持久性库和Kotlin < li >在Kotlin中实现房间持久性库 < in Kotlin中的房间持久性库实现(Gradle错误) 我怀疑其他错误是由于AS、Kotlin和Java 8造成的,所

  • 问题内容: 我正在使用Airflow计划批处理作业。我有一个DAG(A)每晚运行,另一个DAG(B)每月运行一次。B取决于A已成功完成。但是B需要很长时间才能运行,因此我想将其保存在单独的DAG中,以实现更好的SLA报告。 如何使运行DAG B依赖于同一天DAG A的成功运行? 问题答案: 您可以使用名为ExternalTask​​Sensor的运算符来实现此行为。将安排DAG(B)中的任务(B1

  • 1. 前言 上一节,我们通过 xml 文件的配置方式,实现了对多种依赖类型的注入,当然体会到了 xml 文件配置方式的弊端:有一点麻烦。 依赖注入是有两种方式,一种是 xml ,另外一种就是注解的配置方式。 本节,我们演示下通过注解配置这种方式来实现注入依赖。 来吧 ,直入主题,莫浪费大好光阴… 2. 工程实例 2.1 注解的介绍 在正式使用注解之前,我们首先介绍下注解语法以及它的作用。 @Aut

  • 本文向大家介绍依赖注入和工厂模式之间的区别。,包括了依赖注入和工厂模式之间的区别。的使用技巧和注意事项,需要的朋友参考一下 工厂注入和依赖注入都是设计模式,可用于增强软件组件之间的松散耦合能力。  工厂设计模式用于创建对象。但是,对象的注入和生命周期管理应由应用程序内的程序员处理。无法在单个位置配置所有内容。因此,程序员需要在任何需要的地方调用对象创建逻辑,这最终会阻碍松散的耦合能力。 在DI设计

  • 我在maven中学习了“导入”范围,并做了下面的一个示例项目, Project_1POM文件: 项目2 POM文件: 但是,这会引发一个错误,说明JUnit包在Project2中不可用。当我从POM文件中删除依赖管理标记project_1。一切工作正常。但是根据专家医生的说法, 此范围仅在节中pom类型的依赖项上受支持。它表示要用指定POM节中的有效依赖项列表替换的依赖项。由于它们被替换,具有导入