2017-05-22 39 views
0

我從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

這是因爲java代理是如何工作的......例如,你可以創建一個服務來存儲ChannelInboundHandlerAdapter實例(ChannelInboundService),當你需要的時候自動裝載這個服務,並且從中獲取channelInboundHandlerAdapter引用。 – Dani

回答

0

那麼這與Spring沒有關係,而是使用Java和OO編程。

你聲明擁有一個ServerHandler類型的對象,並嘗試將它傳遞給一個方法pipeline.addLast,我猜期望的是一個類型爲io.netty.channel.ChannelHandler的對象。 ServerHandler不是ChannelHandler的子節點,因此編譯器無法接受,它不能保證它在運行時將會收到的真實實例將是ChannelHandler的子節點。

這是簡單的OO概念。在這裏我不明白你爲什麼要將你的字段聲明爲ServerHandler。