Внедрение бетонного класса весной, который должен подклассифицировать тип фрейма

94
9

У меня есть конкретный тип, который расширяет типы из Netty framework:

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, который мой конкретный тип делает, но интерфейс этого не делает. Что люди делают в этих ситуациях?

спросил(а) 2020-04-04T01:58:02+03:00 3 месяца назад
1
Решение
78

Это не имеет ничего общего с Spring, но с программированием на Java и OO.

Вы объявляете наличие объекта типа ServerHandler и пытаетесь передать его методу method.addLast, который, как я предполагаю, ожидает объект типа io.netty.channel.ChannelHandler. ServerHandler не является дочерним элементом ChannelHandler, поэтому компилятор не может принять, что у него нет гарантии, что реальный экземпляр, который он получит во время выполнения, будет дочерним по каналу ChannelHandler.

Это простая концепция OO. Здесь я не понимаю, почему вы объявляете свое поле ServerHandler.

ответил(а) 2020-04-04T02:16:59.473864+03:00 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема