2012-10-24 83 views
1

我在HandlerConfiguration.java定義就像兩個GenericHandlerResolver豆類:不能自動裝配相同類型的2種配置豆

@Bean(autowire = Autowire.BY_NAME) 
@Scope(value = "prototype") 
public GenericHandlerResolver defaultHandlerResolver() { 
    return new GenericHandlerResolver(){{ 
     setHandlers(new ArrayList<Handler>(){{ 
      add(loggingHandler()); 
      add(sessionHandler()); 
     }}); 
    }}; 
} 

@Bean(autowire = Autowire.BY_NAME) 
@Scope(value = "prototype") 
public GenericHandlerResolver maskingHandlerResolver() { 
    return new GenericHandlerResolver(){{ 
     setHandlers(new ArrayList<Handler>(){{ 
      add(maskingLoggingHandler()); 
      add(sessionHandler()); 
     }}); 
    }}; 
} 

然後我想自動裝配兩種不同的豆子放進WebServiceConfiguration.java並在幾個使用它們十幾JaxWsPortProxyFactoryBean豆類,如:

@Configuration 
public class WebServiceConfiguration { 
... 

public Integer paymentServiceTimeout; 
@Bean @DependsOn("applicationProperties") 
public Map<String, Object> paymentServiceProperties(){ 
    return new HashMap<String, Object>(){ 
     {put(timeoutKey, paymentServiceTimeout);} 
    }; 
} 

... 
// Logging handler resolver:  
/*@Autowired 
protected GenericHandlerResolver defaultHandlerResolver;*/ 

// Logging handler resolver that will mack Credit Cards: 
@Autowired 
protected GenericHandlerResolver maskingHandlerResolver; 

... 

@Bean 
@Lazy 
@DependsOn("applicationProperties") 
public JaxWsPortProxyFactoryBean paymentServicePort() throws Exception { 
    JaxWsPortProxyFactoryBean jppfb = new JaxWsPortProxyFactoryBean() {{ 
     setServiceInterface(PaymentServicePortType.class); 
     setWsdlDocumentUrl(new URL(paymentServiceEndpoint + "?wsdl")); 
     setServiceName("PaymentService"); 
     setEndpointAddress(paymentServiceEndpoint); 
     setCommonProperties(this, 
       paymentServiceProperties(), 
       maskingHandlerResolver, 
       LEGACY_NAMESPACE); 
    }}; 
    jppfb.afterPropertiesSet(); 
    return jppfb; 
} 

protected void setCommonProperties(JaxWsPortProxyFactoryBean bean, 
            Map<String, Object> customProperties, 
            GenericHandlerResolver handlerResolver, 
            String namespace) { 
    bean.setMaintainSession(false); 
    bean.setLookupServiceOnStartup(false); 
    bean.setCustomProperties(customProperties); 
    bean.setHandlerResolver(handlerResolver); 
    bean.setNamespaceUri(namespace); 
} 

我的問題是,這部作品在XML配置,但現在,我動這javaConfig,如果我有WebServiceConfiguration.java多個GenericHandlerResolver,處理程序無法正常工作(不日誌記錄),但我沒有收到任何錯誤消息,所以我不知道發生了什麼。

回答

0

嘗試使用Resource註解,而不是自動裝配Autowired的:

@Resource(name="defaultHandlerResolver") 
protected GenericHandlerResolver defaultHandlerResolver; 

@Resource(name="maskingHandlerResolver") 
protected GenericHandlerResolver maskingHandlerResolver 

另外,您可以與使用@Qualifier @Autowired

@Autowired 
@Qualifier("defaultHandlerResolver") 
protected GenericHandlerResolver defaultHandlerResolver;*/ 

@Autowired 
@Qualifier("maskingHandlerResolver") 
protected GenericHandlerResolver maskingHandlerResolver;