2012-12-13 16 views
6

Bu, bir Spring yapılandırması hakkında bir sözdizimi sorusudur (bkz. Spring-beans-3.1.xsd ve spring-mvc-3.1.xsd).3-1 Baharında argüman çözümleyici olarak fasülye referansını nasıl belirlerim?

Özel bir argüman çözümleyicisi olarak kaydetmek istediğim belirli bir tanımlama (id = "SecurityRequestParametersArgumentResolver") sahibiyim. xml parçası olduğu:

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

... gördüğüm örneklerin hepsi böylece BU benziyor, ve soru tekrarı varsayılan no-argüman yapıcısı

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

peşinde, ne gerekir Spring sözdizimi, özel bir argüman çözümleyici olarak fasulye referansı kullanmak için mi?

Teşekkürler!

cevap

1

En azından yapıcı argüman sorun kolayca

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

çözülebilir Ama <mvc:argument-resolvers> içinde fasulye yerine bir referans kullanmak için herhangi bir yol bilmiyorum. Ama ne yapmak istediğinize bağlı olarak, birkaç iş vardır.

  • HandlerMethodArgumentResolver uygulayan bir proxy sınıf Oluştur Bean Fabrikası
  • kullanın ve bir diğer örneğine her çağrıyı yönlendirmek, o zaman normal bir fasulyesi gibi kendi SecurityRequestParametersArgumentResolver ve <mvc:argument-resolvers> bölümünde Proxy'yi kaydedebilir.

Vekil:

class HandlerMethodArgumentResolverProxy 
     implements HandlerMethodArgumentResolver{ 
    HandlerMethodArgumentResolver delegate; 

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

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

    //delegate for resolveArgument   
} 

yapılandırma:

<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> 
İlgili konular