gpt4 book ai didi

spring - 在 Spring 3-1 中,我如何将 bean 引用指定为参数解析器?

转载 作者:行者123 更新时间:2023-12-04 15:58:44 28 4
gpt4 key购买 nike

这是一个关于 Spring 配置的语法问题(引用 spring-beans-3.1.xsd 和 spring-mvc-3.1.xsd)。

我有一个特定的 bean 定义 (id="SecurityRequestParametersArgumentResolver"),我想将其注册为自定义参数解析器。 xml 片段是:

<bean id="SecurityRequestParametersArgumentResolver"
class="xxx.security.web.SecurityRequestParametersArgumentResolver">
<property name="credentialsManager" ref="CredentialsManager" />
<property name="tokenService" ref="TokenService" />
</bean>

... AND I would like to use a bean reference. The following three lines don't obey the xsd-grammar ( what should be the correct tag declaration here? )
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean ref="SecurityRequestParametersArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>

...我见过的所有示例都像这样,因此都在使用默认的无参数构造函数
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="class="xxx.security.web.SecurityRequestParametersArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>

重复这个问题,Spring 语法应该是什么才能使用 bean 引用作为自定义参数解析器?

谢谢!

最佳答案

至少构造函数参数问题可以轻松解决

<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="class="xxx.security.web.SecurityRequestParametersArgumentResolver">
<constructor-arg value="123"/>
</bean>
</mvc:argument-resolvers>
</mvc:annotation-driven>

但是我不知道在 <mvc:argument-resolvers> 中使用引用而不是 bean 的任何方法.但是,根据您想要做什么,有几种解决方法。
  • 使用 Bean Factory
  • 创建一个实现 HandlerMethodArgumentResolver 的代理类并将每个调用转发到另一个实例,然后您就可以拥有自己的 SecurityRequestParametersArgumentResolver像一个普通的 bean 并在 <mvc:argument-resolvers> 中注册代理部分。

  • 代理:
    class HandlerMethodArgumentResolverProxy
    implements HandlerMethodArgumentResolver{
    HandlerMethodArgumentResolver delegate;

    publicHandlerMethodArgumentResolverProxy
    (HandlerMethodArgumentResolver delegate){
    this.delegate=delegate;
    }

    public boolean supportsParameter(MethodParameter parameter) {
    this.delegate.supportsParameter(parameter);
    }

    //delegate for resolveArgument
    }

    配置:
    <bean id="securityRequestParametersArgumentResolver"
    class="xxx.security.web.SecurityRequestParametersArgumentResolver">
    ...
    </bean>

    <mvc:annotation-driven>
    <mvc:argument-resolvers>
    <bean class "HandlerMethodArgumentResolverProxy">
    <constructor-arg
    ref="securityRequestParametersArgumentResolver"/>
    </bean>
    </mvc:argument-resolvers>
    </mvc:annotation-driven>

    关于spring - 在 Spring 3-1 中,我如何将 bean 引用指定为参数解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13868784/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com