美文网首页
springboot禁止循环依赖

springboot禁止循环依赖

作者: 江江的大猪 | 来源:发表于2021-05-19 22:07 被阅读0次
    • 良好的工程设计的组件依赖关系一定是单向的,如果有循环的依赖关系,组件间的生命周期都是不明确的。在golang中直接就不允许有循环import,所以哪怕spring可以支持循环依赖,也最好不要循环
    • springboot2之后已经默认禁止了同名bean,并可以通过spring.main.allow-bean-definition-overriding配置
    @Slf4j
    @SpringBootApplication
    @PropertySource(value = {"classpath:conf.properties"}, encoding = "UTF-8")
    public class StartUp {
    
        public static void main(String[] args) {
            long start = System.currentTimeMillis();
            // 手动禁止循环依赖,高版本springboot默认已经禁止了同名bean并提供了配置项,但是没提供循环依赖的配置项
            try (ConfigurableApplicationContext context = new SpringApplicationBuilder(StartUp.class)
                    .initializers((ApplicationContextInitializer<GenericApplicationContext>) applicationContext -> {
                        applicationContext.setAllowCircularReferences(false);
                    }).run(args)) {
                // 先启动grpc再启动http探活
                context.getBean(GrpcServer.class).start();
                context.getBean(HttpServer.class).bind();
                log.info("start success cost:{}", System.currentTimeMillis() - start);
            } catch (Exception e) {
                log.error("start error", e);
                System.exit(-1);
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:springboot禁止循环依赖

          本文链接:https://www.haomeiwen.com/subject/rzemjltx.html