You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义@ConfigurationProperties的内部类型中实现@Autowire注入?

嵌套配置属性的依赖注入解决方案

你遇到的问题本质是Spring Boot默认只会将标注了@ConfigurationProperties的顶层类注册为Spring Bean,嵌套的内部类(比如你的Topics)不会自动成为可被@Autowired的Bean。下面是两种可行的解决方式:

方式一:手动注册嵌套类为Bean

通过配置类,从已注入的顶层配置属性中取出嵌套实例,将其注册为Spring Bean:

@Configuration
public class BeanRegistrationConfig {
    @Bean
    public Custom.Topics customTopics(Custom custom) {
        return custom.topics();
    }
}

完成注册后,你就可以直接通过@Autowired注入Custom.Topics类型的实例了。

方式二:将嵌套类改为独立的配置属性类

如果Topics本身需要被单独配置和注入,可以把它抽出来作为独立的配置属性类,指定对应的配置前缀:

@ConfigurationProperties("a.b.topics")
public record Topics(String topicA, String topicB) {}

@ConfigurationProperties("a.b")
public record Custom(Topics topics) {}

然后在启动类或配置类上添加@EnableConfigurationProperties注解,同时指定这两个类:

@SpringBootApplication
@EnableConfigurationProperties({Custom.class, Topics.class})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

这种方式下,Topics会被Spring自动注册为Bean,支持直接@Autowired注入,同时原有的Custom配置结构也能正常工作。

最佳选择建议

  • 若Topics仅作为Custom的附属配置,优先选择方式一,保持配置结构的内聚性;
  • 若Topics需要被多个组件独立使用,或者本身有独立的配置需求,选择方式二更灵活。

内容的提问来源于stack exchange,提问作者vab2048

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:33:11