我在使用自定义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%。我已将我的答案作为解决方案发布。无论如何,感谢您的帮助,它帮助我找到真正的问题。 –