首页  >  问答  >  正文

java - 在Spring初始化过程中阻塞合理吗?

读到了 NettyRPC 的代码, 发现 RpcServer 中实现了 Spring 的 InitializingBean, 在方法实现里启动了一个 Netty 服务器, 并且阻塞了.

@Override
public 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 源码, 并不清楚情况, 求大家不吝赐教...

PHP中文网PHP中文网2674 天前889

全部回复(3)我来回复

  • 黄舟

    黄舟2017-06-23 09:16:20

    感觉自己问了个很笨的问题... Spring容器的初始化过程是单线程的, 在这里阻塞住了自然就表示... 后续工作没法进行了.

    在 bean 配置文件的最后面加了个测试的 Bean , 在初始化的时候会打log, 结果并没有打出来.

    回复
    0
  • 巴扎黑

    巴扎黑2017-06-23 09:16:20

    这个应该是合理的,因为如果多线程实例化Bean,那么Bean和Bean之间的依赖就很难处理了,代码复杂度陡升。

    回复
    0
  • PHP中文网

    PHP中文网2017-06-23 09:16:20

    合理,原因楼上已经说了。如果异步初始化bean的需求,重写BeanFactory的逻辑就好了,前提是你要确保这些bean没有相互依赖关系

    回复
    0
  • 取消回复