2017-10-16 2 views
0

Ich habe eine ChannelOutboundHandlerAdapter, die Methode write überschreibt. Was sind die Unterschiede zwischen den Aufruf übergeordneten Klasse write Methode:Netty ChannelOutboundHandlerAdapter schreiben

public class MyChannelOutboundHandler extends ChannelOutboundHandlerAdapter { 
    @Override 
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { 
    //some code 
    super.write(ctx, anotherMessage, promise); 
    } 
} 

und Aufruf Kontext write:

public class MyChannelOutboundHandler extends ChannelOutboundHandlerAdapter { 
    @Override 
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { 
    //some code 
    ctx.write(anotherMessage); 
    } 
} 

Antwort

1

Sie können die source code des ChannelOutboundHandlerAdapter#write überprüfen, dies zu bestimmen. Es ruft eine Schreib auf Kontext sowohl Message Passing und verspricht:

@Override 
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { 
    ctx.write(msg, promise); 
} 

Also zuerst offensichtlicher Unterschied ist promise nicht Kontext weitergegeben werden.

Der Unterschied auf lange Sicht wird sein:

  1. aufrufen super Methode Sie Schreibverfahren die Dekoration sind. Sie sollten dies tun, wenn Sie dem Standard ein zusätzliches Verhalten hinzufügen möchten. Wenn sich später die Quelle ChannelOutboundHandlerAdapter ändert, wird Ihre Klasse nur noch Funktionen hinzufügen.
  2. Wenn Sie ChannelHandlerContext direkt aufrufen, ersetzen Sie die ursprüngliche Implementierung. Es wird also völlig unabhängig von Änderungen der Basisklassenmethode sein.