美文网首页
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