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. html5 - 在一個頁面中 初始了兩個swiper 不知道哪里錯了 一直不對2. mac連接阿里云docker集群,已經卡了2天了,求問?3. html5和Flash對抗是什么情況?4. 微信小程序session無法緩存的問題5. 前端 - 微信支付開發:調用jsapi時缺少參數total_fee6. java - Web開發 - POI導出帶有下拉框的Excel和解決下拉中數組過多而產生的異常7. phpadmin的數據庫,可以設置自動變化時間的變量嗎?就是不需要接收時間數據,自動變化8. docker綁定了nginx端口 外部訪問不到9. vue.js - nginx反向代理location順序問題10. node.js - 如何在vue模板中使用nodeJS?
