java - 在Spring初始化過程中阻塞合理嗎?
問題描述
讀到了 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沒有相互依賴關系
相關文章:
1. php程序員工具箱裝的mysql怎么刪除啊2. javascript - 關于fullpage.js 自動高度失效的問題3. python - 已關注粉絲再次掃描微信帶參數二維碼報錯4. javascript - 微信h5頁面自定義按鈕使之具有分享頁面公共5. javascript - vue異步數據打印問題6. css - transform: translateY(-50%)在360瀏覽器極速模式下使得文字變模糊了7. python - 用生成器迭代數據在文件和IDLE中運行結果不一致,8. node.js - express-session 怎么支持無 cookie 的微信小程序session9. javascript - Vue的‘v-for’循環中,子組件接收‘prop’傳值不更新的奇葩怪異問題求分析。10. mysql - phpmyadmin怎么分段導出數據啊?
