首頁  >  問答  >  主體

java - 在Spring初始化過程中阻塞合理嗎?

讀到了 NettyRPC 的程式碼, 發現 RpcServer 中實作了 Spring 的 InitializingBean, 在方法實作裡啟動了一個 Netty 伺服器, 並且阻塞了.

@Override
public void afterPropertiesSet() throws Exception {
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {       
        // 前略...        
        future.channel().closeFuture().sync();
    } finally {
        workerGroup.shutdownGracefully();
        bossGroup.shutdownGracefully();
    }
}

原始碼位址:
https://github.com/luxiaoxun/...

我想問的是這樣阻塞不會對 Spring 的初始化造成影響嗎? (沒有讀過 Spring 源碼, 並不清楚情況, 求大家不吝賜教...

PHP中文网PHP中文网2674 天前890

全部回覆(3)我來回復

  • 黄舟

    黄舟2017-06-23 09:16:20

    感覺自己問了個很笨的問題... Spring容器的初始化過程是單線程的, 在這裡阻塞住了自然就表示... 後續工作沒法進行了.

    在 bean 設定檔的最後面加了個測試的 Bean , 在初始化的時候會打log, 結果並沒有打出來.

    回覆
    0
  • 巴扎黑

    巴扎黑2017-06-23 09:16:20

    這個應該是合理的,因為如果多執行緒實例化Bean,那麼Bean和Bean之間的依賴就很難處理了,程式碼複雜度陡升。

    回覆
    0
  • PHP中文网

    PHP中文网2017-06-23 09:16:20

    合理,原因樓上已經說了。如果非同步初始化bean的需求,重寫BeanFactory的邏輯就好了,前提是你要確保這些bean沒有相互依賴關係

    回覆
    0
  • 取消回覆