我有一个从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的类型,我的具体类型可以这样做,但接口没有。人们在这些情况下做了什么?
答案 0 :(得分:0)
这与Spring无关,但与Java和OO编程无关。
你声明有一个ServerHandler类型的对象,并尝试将它传递给方法pipeline.addLast,我想这是一个类型为io.netty.channel.ChannelHandler的对象。 ServerHandler不是ChannelHandler的子代,因此编译器不能接受它不能保证它在运行时将接收的实例将是ChannelHandler的子代。
这是简单的OO概念。在这里,我不明白为什么要将您的字段声明为ServerHandler。