我在使用自定義tcp協議時在Mule中遇到問題,並且在自定義協議內部有使用@Autowired註釋的彈簧依賴注入。Mule 3.3 TCP自定義協議和彈簧注入@Autowired不起作用
CustomProtocol.java
public class ContentLengthProtocol extends AbstractByteProtocol{
@Autowired
private Adapter adapter;
@Lookup("atm-inbound")
private ImmutableEndpoint inboundEndpoint;
public ContentLengthProtocol(){
super(true);
}
public Object read(InputStream is) throws IOException{
// do some reading
}
}
騾配置片段
<spring:beans>
<spring:bean id="adapter" class="id.company.dao.Adapter"/>
<spring:bean id="contentLengthProtocol" class="id.company.protocol.ContentLengthProtocol"/>
</spring:beans>
<tcp:connector name="TCPConnector" validateConnections="true" sendBufferSize="0" receiveBufferSize="1024" receiveBacklog="50" reuseAddress="true" keepAlive="true" clientSoTimeout="0" serverSoTimeout="0" socketSoLinger="0" doc:name="TCPConnector">
<tcp:custom-protocol ref="contentLengthProtocol"/>
</tcp:connector>
<tcp:endpoint name="tcp-inbound" address="tcp://localhost:1234" connector-ref="TCPConnector" doc:name="TCP"/>
<flow name="AdapterFlow" doc:name="AdapterFlow">
<tcp:inbound-endpoint ref="tcp-inbound" doc:name="Inbound TCP"/>
<echo-component doc:name="Echo"/>
</flow>
當ContentLengthProtocol流讀取輸入和處理方法讀取,適配器總是零。但奇怪的是,如果我只是定義了ContentLengthProtocol bean,但沒有將TCP連接器中的bean作爲自定義協議引用,那麼Spring注入將像往常一樣工作,並且適配器不爲空。
有人能給我啓發這裏發生的事情嗎? 任何幫助,慷慨讚賞。 謝謝。
嗨大衛,我試過了,但它不工作。正如[doc](http://www.milesoft.org/documentation/display/MULE3USER/Lookup+Annotation)所述,@Lookup僅適用於自定義組件和變換器。但我想要的是向自定義TCP協議注入spring bean。你有其他想法嗎? –
好的,改變了我的建議,建議使用簡單注射而不是自動佈線。 –
嗨大衛,我試過你的解決方案,但它不工作100%。我已將我的答案作爲解決方案發布。無論如何,感謝您的幫助,它幫助我找到真正的問題。 –