关于 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>
中使用引用而不是豆子。但是根据你想做什么,有几个工作轮。
- 使用豆工厂
- 创建一个实现
HandlerMethodArgumentResolver
并将每个调用转发到其他实例的代理类,然后您可以像普通 Bean 一样拥有自己的SecurityRequestParametersArgumentResolver
,并在<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>