當@Autowired用於自定義cxf攔截器時,我似乎遇到了一個小問題。 我的用例是我想記錄肥皂消息並使用AMQP將這些消息發送到另一個系統。這個過程適用於正常的服務等。 但無論我做什麼,所需的屬性都不會自動裝配並保持爲空。如何在自定義cxf攔截器中使用Spring Autowired?
我檢查了春季DI日誌和上下文被掃描和拾取,所以我錯過了什麼?
這在CXF攔截器中甚至可能嗎?
@Component
public class LogInInterceptor extends AbstractSoapInterceptor {
private @Value("#{rabbitMQProperties['rabbitmq.binding.log.soap']}")
String binding;
@Autowired
AmqpTemplate amqpTemplate;
public LogInInterceptor() {
super(Phase.RECEIVE);
}
@Override
public void handleMessage(SoapMessage soapMessage) throws Fault {
logIt(soapMessage);
}
private void logIt(SoapMessage message) throws Fault {
// rest of the code omitted...!!!
amqpTemplate.convertAndSend(binding, buffer.toString());
}
}
通過「撿到」你的意思是你的LogInInterceptor被發現,並且有資格從Spring容器注入?它是否報告過任何其他注射問題(如@Value參數失敗)? –
你可以請用CXF分享這個攔截器的配置嗎?這個問題的原因可能是攔截器可能已經被CXF實例化了,並且Spring可能創建了一個單獨的autowired實例。 –
我已經實現了上面的攔截器,並通過@ org.apache.cxf.interceptor.Interceptors(interceptors = {「org.apache.cxf.interceptor.LoggingInInterceptor」,「mypackagenames.ws.interceptor.LogInInterceptor 「})我根本沒有執行任何附加配置。 – Marco