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. 在应用配置文件 app.php 中找不到’route_check_cache’配置项2. html按键开关如何提交我想需要的值到数据库3. gvim - 谁有vim里CSS的Indent文件, 能缩进@media里面的4. Android中能不能判断一个数据库是create来的,还是open来的?5. HTML 5输入框只能输入汉字、字母、数字、标点符号?正则如何写?6. javascript - 请教如何获取百度贴吧新增的两个加密参数7. 跟着课件一模一样的操作使用tp6,出现了错误8. PHP类属性声明?9. javascript - 求助canvas绘制马赛克的问题,老是取色不准10. html - 微信浏览器h5<video>标签问题
