高内聚自动配置类应聚焦单一职责、命名规范、属性强绑定、条件精准控制、Bean声明简洁。例如MyApiClientAutoConfiguration封装客户端初始化,通过@ConfigurationProperties绑定参数,用@ConditionalOnClass、@ConditionalOnMissingBean等确保按需生效。

高内聚的自动配置类,核心是把“一件事”做完整、边界清晰、不依赖外部随意干预。它不是堆砌注解,而是围绕一个明确功能模块(比如一个客户端、一种数据处理服务),封装好属性绑定、条件判断、Bean 创建和默认行为,让使用者只需配几个关键参数就能开箱即用。
聚焦单一职责,明确功能边界
一个自动配置类只负责一个具体能力,例如:MyApiClientAutoConfiguration 专注初始化 HTTP 客户端及其拦截器、超时配置、序列化器;不要同时掺杂日志配置、缓存初始化或数据库连接逻辑。
- 命名体现功能:以 XXXAutoConfiguration 结尾,前缀对应业务域(如
PayClientAutoConfiguration) - 避免“大而全”:不写
MySystemAutoConfiguration这类模糊名称 - 如果涉及多个子能力(如认证 + 请求模板),可拆成多个配置类,通过
@AutoConfigureAfter或条件联动协调
属性与实现强绑定,拒绝魔法值
所有可配置项必须通过 @ConfigurationProperties 类统一管理,并在自动配置类中显式注入。不能直接在 @Bean 方法里硬写 "http://localhost:8080" 或 30000 这类值。
- 定义属性类(如
MyApiClientProperties),设置合理默认值(timeout = 5000) - 用
@EnableConfigurationProperties(MyApiClientProperties.class)启用绑定 - Bean 方法签名中直接接收该属性对象,构造逻辑一目了然
条件控制精准,避免误激活
用最少、最准的条件注解组合,确保配置类只在真正需要时才生效。常见误用是只加 @ConditionalOnClass,却忽略 Bean 是否已存在或功能是否被禁用。
- 必加
@ConditionalOnClass:确认核心类(如OkHttpClient.class)在 classpath 中 - 必加
@ConditionalOnMissingBean:对主 Bean(如MyApiClient)做兜底,允许用户自定义替换 - 建议加
@ConditionalOnProperty:提供显式开关,如myapi.enabled=true,比“有类就加载”更可控 - Web 相关配置补
@ConditionalOnWebApplication,避免非 Web 场景意外加载
Bean 声明简洁,依赖显式传递
每个 @Bean 方法只做一件事,参数全部来自 Spring 容器(不 new 对象、不静态调用),且优先使用构造器注入风格(即使写在方法里,也体现依赖关系)。
- 主服务 Bean 显式依赖其配置对象和底层组件(如
ObjectMapper、RestTemplate) - 避免在
@Bean方法体内 new 辅助类;辅助类也应作为独立 Bean 提供,便于测试和替换 - 不使用
@Autowired字段注入——配置类本身应无状态,靠方法参数传递依赖


















