这是一个关于 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 的任何方法.但是,根据您想要做什么,有几种解决方法。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/