java - 在Spring初始化過程中阻塞合理嗎?
問題描述
讀到了 NettyRPC 的代碼, 發(fā)現(xiàn) RpcServer 中實現(xiàn)了 Spring 的 InitializingBean, 在方法實現(xiàn)里啟動了一個 Netty 服務(wù)器, 并且阻塞了.
@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容器的初始化過程是單線程的, 在這里阻塞住了自然就表示... 后續(xù)工作沒法進行了.
在 bean 配置文件的最后面加了個測試的 Bean , 在初始化的時候會打log, 結(jié)果并沒有打出來.
回答2:這個應(yīng)該是合理的,因為如果多線程實例化Bean,那么Bean和Bean之間的依賴就很難處理了,代碼復(fù)雜度陡升。
回答3:合理,原因樓上已經(jīng)說了。如果異步初始化bean的需求,重寫B(tài)eanFactory的邏輯就好了,前提是你要確保這些bean沒有相互依賴關(guān)系
相關(guān)文章:
1. mysql數(shù)據(jù)庫做關(guān)聯(lián)一般用id還是用戶名2. linux運維 - python遠程控制windows如何實現(xiàn)3. thinkPHP5中獲取數(shù)據(jù)庫數(shù)據(jù)后默認選中下拉框的值,傳遞到后臺消失不見。有圖有代碼,希望有人幫忙4. python小白 關(guān)于類里面的方法獲取變量失敗的問題5. python - 如何對列表中的列表進行頻率統(tǒng)計?6. javascript - 如何用最快的速度C#或Python開發(fā)一個桌面應(yīng)用程序來訪問我的網(wǎng)站?7. Python2中code.co_kwonlyargcount的等效寫法8. django - Python error: [Errno 99] Cannot assign requested address9. python小白,關(guān)于函數(shù)問題10. 求救一下,用新版的phpstudy,數(shù)據(jù)庫過段時間會消失是什么情況?
