我有一个从 Netty 框架扩展类型的具体类型:
public class ServerHandlerImpl extends ChannelInboundHandlerAdapter implements ServerHandler
ChannelInboundHandlerAdapter 实现 ChannelInboundHandler
当我创建ServerHandlerImpl 时,我想使用Spring 来注入它。我知道我可以使用具体类型。但我不确定是否有办法从接口注入。
ServerHandler 接口现在是空的:
public interface ServerHandler {
}
当我尝试从接口注入类型时,
@Autowired
private ServerHandler serverHandler;
@Override
protected void initChannel(Channel ch) throws Exception {
pipeline.addLast(serverHandler);
}
它不会编译,因为 addLast 正在寻找一种实现 ChannelInboundHandler 的类型,我的具体类型这样做了,但接口没有。人们在这些情况下会做什么?
好吧,这与 Spring 无关,而是与 Java 和 OO 编程有关。
您声明了一个类型为 ServerHandler 的对象,并尝试将它传递给一个方法 pipeline.addLast,我猜它正在等待一个类型为 io.netty.channel.ChannelHandler 的对象。ServerHandler 不是 ChannelHandler 的子级,因此编译器不能接受它不能保证它将在运行时收到的真实实例是 ChannelHandler 的子级。
这是简单的 OO 概念。在这里我不明白您为什么要将您的字段声明为 ServerHandler。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句