延迟暴露
所有服务都将在 Spring 初始化完成后进行暴露,如果你不需要延迟暴露服务,无需配置 delay。
延迟 5 秒暴露服务
请求线程的 applicationContext.getBean() 调用,先同步 singletonObjects 判断 Bean 是否存在,不存在就同步 beanDefinitionMap 进行初始化,并再次同步 singletonObjects 写入 Bean 实例缓存。
- 强烈建议不要在服务的实现类中有 applicationContext.getBean() 的调用,全部采用 IoC 注入的方式使用 Spring的Bean。
- 如果实在要调 getBean(),可以将 Dubbo 的配置放在 Spring 的最后加载。
- 如果不想依赖配置顺序,可以使用 ,使 Dubbo 在 Spring 容器初始化完后,再暴露服务。
- 如果大量使用 getBean(),相当于已经把 Spring 退化为工厂模式在用,可以将 Dubbo 的服务隔离单独的 Spring 容器。