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

如何在Spring Boot中注册具有构造函数依赖关系的HandlerInterceptor

年凯康
2023-03-14

我的用例是通过注释方法在控制器方法之前运行自定义代码。

HandlerInterceptor似乎是一个不错的选择,但似乎不可能将依赖项注入其中,因为它需要在创建上下文之前注册。

到目前为止,我发现的所有示例都使用空构造函数(请参见Spring Boot添加超文本传输协议请求拦截器)或配置中的自动配线属性,这些属性失败是因为我在相同的配置中声明了依赖bean(请求的bean当前正在创建中:是否有不可解析的循环引用?)。

有没有更好的方法不涉及AOP?

共有2个答案

壤驷高洁
2023-03-14

基于上面M的答案ạnh,如果使用组件扫描来注入依赖项,那么可以在WebConfig中自动连接

@Configuration
public WebConfig extends WebMvcConfigurerAdapater {

    @Autowired
    DependentBean dependentBean;

    @Bean
    public CustomInterceptor customInterceptor() {
         return new CustomInterceptor(dependentBean);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(customInterceptor());
    }
}
常睿范
2023-03-14

假设您的拦截器具有如下构造函数依赖关系:

public class CustomInterceptor extends HandlerInterceptor {

    private final DependentBean bean;

    public CustomInterceptor(DependentBean bean) {
        this.bean = bean;
    }
}

然后你可以这样注册你的处理器:

@Configuration
public WebConfig extends WebMvcConfigurerAdapater {

    @Bean
    public DependentBean dependentBean() {
       return new DependentBean();
    }


    @Bean
    public CustomInterceptor customInterceptor() {
         return new CustomInterceptor(dependentBean());
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(customInterceptor());
    }
}

@Configuration将确保每个Bean方法调用返回相同的Bean实例

 类似资料:
  • 我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。

  • 我有一个自定义类,它有一个参数化构造函数 因此,实例化时需要3个参数。如果我想将这个类作为依赖项添加,我发现在Spring中没有直接的方法可以做到这一点。 我知道我可以简单地创建一个类的新实例并使用它的方法。但是我找不到任何直接的方法将这个类注入我的另一个类,即Rest控制器。 需要注意的是:所有3个参数都需要在运行时传递。我不能从属性文件中使用它们 即使Spring中没有直接的方法,我也想知道定

  • 我有我的,我想注入它。我想使用构造函数注入,因为我是这个类的所有者: 问题是,当触发时,该构造函数的参数(即依赖项)将作为附加项从中检索。所以我的问题是,如何将从检索的这些参数提供给我的构造函数注入? 谢谢你。

  • 我正在使用spring官方教程中的示例进行实验,并且对此代码有一个依赖关系: https://github.com/spring-guides/gs-async-method/tree/master/complete 如果您查看类上的代码,我有两个问题: 当服务器启动时,如果我在这个类的构造函数中放置一个断点,就像在构造函数中一样,是由spring使用配置的bean提供的。但是,构造函数上没有注释

  • 我想知道如何在ASP中处理依赖注入。NET核心,用于同时具有对象和字符串作为参数的类型。由于字符串无法注册到DI框架,我目前正在使用implementationfactory并使用服务定位器模式,还有其他方法吗?是否有类似于Autofac的命名参数的.WithParameter? Asp.net核心DI使得向DI框架注册一个类型变得容易(并且干净),对于那些已经向DI框架注册了参数的类型。 给定以

  • 问题内容: 我发现我的构造函数开始看起来像这样: 不断增加的参数列表。由于“容器”是我的依赖项注入容器,所以为什么我不能这样做: 每堂课?不利之处是什么?如果执行此操作,则感觉就像我在使用精美的静态方法。请分享你对IoC和依赖注入疯狂的想法。 问题答案: 正确的是,如果将容器用作服务定位器,则它或多或少是光荣的静态工厂。由于种种原因,我认为这是一种反模式。 构造函数注入的奇妙好处之一是,它使违反单