spring boot 中用依赖注入实现策略模式的核心是通过@component自动注册策略bean并注入map,按bean名称键值对统一管理,运行时动态选取执行,无需工厂类或if-else。

Spring Boot 中用依赖注入实现策略模式,核心是让多个策略实现类自动注册为 Bean,再通过 Map 或上下文统一管理、按需选取。不需要手写工厂类,也不靠 if-else 匹配,靠 Spring 容器自动装配和类型识别就能完成解耦。
定义统一策略接口
所有策略行为必须遵循同一契约。接口里通常包含两部分:业务执行方法 + 类型识别方法(用于后续路由)。
- 接口方法要足够抽象,比如 execute()、pay()、prop()
- 必须提供一个标识当前策略的字段或方法,如 getSupportedType() 或直接用类名/注解标记
- 避免在接口中定义具体业务参数,可用泛型或封装对象传入,提升复用性
为每个策略打上 Spring Bean 标签
每个实现类加 @Component,并可选地用 @Qualifier 或自定义注解指定唯一键名(如 @Component("wechat"))。这样 Spring 扫描时会把它们都注册进 IOC 容器。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 不加名称时,Spring 默认使用类名首字母小写作为 Bean 名(如 AlipayPaymentStrategy → alipayPaymentStrategy)
- 若需更清晰的语义键,推荐显式命名:@Component("alipay")
- 所有实现类必须实现同一个接口,否则无法被统一注入
用 Map 自动注入全部策略实现
在上下文类(如 Service)中,直接注入 Map
- key 是 Bean 名称(即 @Component 的值),不是类名也不是枚举值
- 调用时先根据运行时参数获取 key,再从 Map 取出对应策略执行
- 示例:strategyMap.get("wechat").pay(orderId, amount)
- 建议加判空或默认兜底,避免 key 不存在时 NPE
封装执行逻辑,隐藏选择细节
把策略选取和执行封装在一个方法里,对外只暴露统一入口。例如传入 type 字符串,内部查 Map、校验支持性、调用 execute。
- 可在执行前调用策略自身的 isSupported() 方法做二次校验
- 支持动态扩展:新增策略只需加个实现类+@Component,无需改任何已有代码
- 便于单元测试——可单独 mock 某个策略 Bean 进行验证










