java - 在Spring初始化過(guò)程中阻塞合理嗎?
問(wèn)題描述
讀到了 NettyRPC 的代碼, 發(fā)現(xiàn) RpcServer 中實(shí)現(xiàn)了 Spring 的 InitializingBean, 在方法實(shí)現(xiàn)里啟動(dòng)了一個(gè) 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/...
我想問(wèn)的是這樣阻塞不會(huì)對(duì) Spring 的初始化造成影響嗎? (沒(méi)有讀過(guò) Spring 源碼, 并不清楚情況, 求大家不吝賜教...
問(wèn)題解答
回答1:感覺(jué)自己?jiǎn)柫藗€(gè)很笨的問(wèn)題... Spring容器的初始化過(guò)程是單線程的, 在這里阻塞住了自然就表示... 后續(xù)工作沒(méi)法進(jìn)行了.
在 bean 配置文件的最后面加了個(gè)測(cè)試的 Bean , 在初始化的時(shí)候會(huì)打log, 結(jié)果并沒(méi)有打出來(lái).
回答2:這個(gè)應(yīng)該是合理的,因?yàn)槿绻嗑€程實(shí)例化Bean,那么Bean和Bean之間的依賴就很難處理了,代碼復(fù)雜度陡升。
回答3:合理,原因樓上已經(jīng)說(shuō)了。如果異步初始化bean的需求,重寫B(tài)eanFactory的邏輯就好了,前提是你要確保這些bean沒(méi)有相互依賴關(guān)系
相關(guān)文章:
1. mysql - 在不允許改動(dòng)數(shù)據(jù)表的情況下,如何優(yōu)化以varchar格式存儲(chǔ)的時(shí)間的比較?2. docker start -a dockername 老是卡住,什么情況?3. MySQL中無(wú)法修改字段名的疑問(wèn)4. docker網(wǎng)絡(luò)端口映射,沒(méi)有方便點(diǎn)的操作方法么?5. css3 - 純css實(shí)現(xiàn)點(diǎn)擊特效6. 安全性測(cè)試 - nodejs中如何防m(xù)ySQL注入7. javascript - 關(guān)于apply()與call()的問(wèn)題8. java中返回一個(gè)對(duì)象,和輸出對(duì)像的值,意義在哪兒9. python文檔怎么查看?10. python - pandas dataframe如何對(duì)某列的空數(shù)據(jù)位置進(jìn)行update?update的函數(shù)是自定義的,參數(shù)是同一行的另外兩列數(shù)據(jù)
