您的位置:首頁技術文章
文章詳情頁

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

瀏覽:107日期:2023-10-26 14:07:11

問題描述

讀到了 NettyRPC 的代碼, 發現 RpcServer 中實現了 Spring 的 InitializingBean, 在方法實現里啟動了一個 Netty 服務器, 并且阻塞了.

@Overridepublic 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 源碼, 并不清楚情況, 求大家不吝賜教...

問題解答

回答1:

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

在 bean 配置文件的最后面加了個測試的 Bean , 在初始化的時候會打log, 結果并沒有打出來.

回答2:

這個應該是合理的,因為如果多線程實例化Bean,那么Bean和Bean之間的依賴就很難處理了,代碼復雜度陡升。

回答3:

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

標簽: java
相關文章:
国产综合久久一区二区三区