How to specify bean reference as resolver argument in Spring 3-1?

This is a syntax question about Spring configuration (see spring - beans -3.1.xsd and spring -mvc-3.1.xsd).

I have a specific bean definition (id = "SecurityRequestParametersArgumentResolver") that I want to register as a custom argument resolver. Xml snippet:

<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> 

... All the examples that I saw look like THIS, and therefore come after the default no-argument constructor

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

Repeating the question, what should Spring syntax be like to use a bean reference as a custom argument argument?

Thanks!

+6
source share
1 answer

At least the constructor argument problem can be easily solved.

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

But I do not know how to use the link instead of the bean inside <mvc:argument-resolvers> . But depending on what you want to do, there are several workarrounds.

  • Use bean factory
  • Create a proxy class that implements HandlerMethodArgumentResolver and redirect each call to another instance, then you can have your own SecurityRequestParametersArgumentResolver as a regular bean and register the proxy server in the <mvc:argument-resolvers> section.

Proxy server:

 class HandlerMethodArgumentResolverProxy implements HandlerMethodArgumentResolver{ HandlerMethodArgumentResolver delegate; publicHandlerMethodArgumentResolverProxy (HandlerMethodArgumentResolver delegate){ this.delegate=delegate; } public boolean supportsParameter(MethodParameter parameter) { this.delegate.supportsParameter(parameter); } //delegate for resolveArgument } 

configurations:

 <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> 
+1
source

All Articles