SpringBoot 3中SpringDoc配置类循环依赖问题解决求助
SpringDoc配置类循环依赖问题解决方法
问题原因
你的配置代码存在自循环依赖:自定义SpringDocConfigProperties和SwaggerUiConfigProperties Bean时,每个@Bean方法都将自身要创建的Bean类型作为参数。Spring初始化时会发现:要创建springDocConfig Bean,需要先注入SpringDocConfigProperties实例,但这个实例正是当前方法要生成的,形成了Bean自己依赖自己的死循环,即使开启循环依赖配置也无法破解。
解决方案
方案1:直接创建Bean实例(不依赖注入参数)
修改配置类,手动创建目标Bean的实例并设置属性,避免方法参数依赖自身要创建的Bean:
private static final String SWAGGER_CONFIG = "/v3/api-docs/swagger-config"; private static final String SWAGGER_URL = "/v3/api-docs"; private static final List<String> CONTROLLER_PACKAGES = List.of("com.example.desafiobackvotos.controller"); @Bean @Primary public SpringDocConfigProperties springDocConfig(){ SpringDocConfigProperties config = new SpringDocConfigProperties(); config.setPackagesToScan(CONTROLLER_PACKAGES); return config; } @Bean @Primary public SwaggerUiConfigProperties swaggerUiConfig(){ SwaggerUiConfigProperties config = new SwaggerUiConfigProperties(); config.setConfigUrl(SWAGGER_CONFIG); config.setUrl(SWAGGER_URL); return config; }
方案2:注入已有Bean并修改属性(推荐)
利用SpringDoc自动配置的Bean,通过@Autowired注入后修改属性,无需手动创建新Bean:
@Configuration public class SpringDocConfig { private static final String SWAGGER_CONFIG = "/v3/api-docs/swagger-config"; private static final String SWAGGER_URL = "/v3/api-docs"; private static final List<String> CONTROLLER_PACKAGES = List.of("com.example.desafiobackvotos.controller"); @Autowired public void configureSpringDoc(SpringDocConfigProperties config) { config.setPackagesToScan(CONTROLLER_PACKAGES); } @Autowired public void configureSwaggerUi(SwaggerUiConfigProperties config) { config.setConfigUrl(SWAGGER_CONFIG); config.setUrl(SWAGGER_URL); } }
方案3:配置文件直接设置(最简洁)
完全不需要编写配置类,直接在application.yml或application.properties中配置SpringDoc属性:
springdoc: packages-to-scan: com.example.desafiobackvotos.controller swagger-ui: config-url: /v3/api-docs/swagger-config url: /v3/api-docs
内容的提问来源于stack exchange,提问作者dcm50
相关产品推荐
相关产品推荐

