巧用 Spring 自动注入快速实现策略模式

写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下!

GitHub地址:https://github.com/abel-max/Java-Study-Note/tree/master

最近看同事的代码时候,学到了个小技巧,在某些场景下非常挺有用的,这里分享一下给大家。

巧用 Spring 自动注入快速实现策略模式

Spring 中 @Autowired 注解,大家应该不会陌生,用过 Spring 的肯定也离不开这个注解,通过这个注解可以帮我们自动注入我们想要的 Bean。

除了这个基本功能之外, @Autowired 还有更加强大的功能,还可以注入指定类型的数组,List/Set 集合,甚至还可以是 Map 对象。

比如说当前应用有一个支付接口 PayService ,分别需要对接支付宝、微信支付、银行卡,所以分别有三个不同实现类 AliPayService , WechatPayservice , BankCardPayService 。

四个类的关系如下图所示:

巧用 Spring 自动注入快速实现策略模式

如果此时我需要获取当前系统类所有 PayService Bean,老的方式我们只能通过 BeanFact

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A:在 Spring 框架中,可以使用策略模式实现可插拔的行为。策略模式是一种常用的面向对象设计模式,它允许在运行时动态地选择算法的具体实现。 在 Spring 框架中,策略模式一般是通过依赖注入实现的。假设有一个订单处理服务,它可以根据不同的订单类型采用不同的处理算法。我们可以定义一个 OrderService 接口和多个实现类来分别处理不同类型的订单: ```java public interface OrderService { void processOrder(Order order); } ``` ```java @Component public class RegularOrderService implements OrderService { @Override public void processOrder(Order order) { // 处理普通订单 } } ``` ```java @Component public class VipOrderService implements OrderService { @Override public void processOrder(Order order) { // 处理 VIP 订单 } } ``` 在客户端代码中,可以根据订单类型来选择不同的 OrderService 实现: ```java @Service public class OrderProcessor { private final Map<String, OrderService> orderServices; public OrderProcessor(Map<String, OrderService> orderServices) { this.orderServices = orderServices; } public void processOrder(Order order) { String orderType = order.getType(); OrderService orderService = orderServices.get(orderType); if (orderService == null) { throw new IllegalArgumentException("No order service found for type: " + orderType); } orderService.processOrder(order); } } ``` 此时,我们可以通过 Spring 容器来自动注入多个 OrderService 实现,并将它们保存在一个 Map 中。客户端代码在处理订单时,只需要根据订单类型从 Map 中获取对应的 OrderService 实现即可。 这种实现方式可以很方便地扩展和维护代码,可以灵活地添加新的订单类型和对应的处理算法,同时可以避免大量的 if-else 或 switch-case 语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值