当我使用自定义 tcp 协议时,我在 Mule 中遇到问题,并且在自定义协议内部有一个使用 @Autowired 注释的弹簧依赖注入。
自定义协议.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 上流读取输入和处理读取方法时,适配器始终为 null。但奇怪的是,如果我只定义 ContentLengthProtocol bean,但没有将 TCP 连接器内的 bean 引用为自定义协议,那么 spring 注入照常工作并且适配器不为空。
有人可以告诉我这里发生的事情吗?任何帮助都将不胜感激。谢谢。