写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下!
GitHub地址:https://github.com/abel-max/Java-Study-Note/tree/master
最近看同事的代码时候,学到了个小技巧,在某些场景下非常挺有用的,这里分享一下给大家。
Spring 中 @Autowired 注解,大家应该不会陌生,用过 Spring 的肯定也离不开这个注解,通过这个注解可以帮我们自动注入我们想要的 Bean。
除了这个基本功能之外, @Autowired 还有更加强大的功能,还可以注入指定类型的数组,List/Set 集合,甚至还可以是 Map 对象。
比如说当前应用有一个支付接口 PayService ,分别需要对接支付宝、微信支付、银行卡,所以分别有三个不同实现类 AliPayService , WechatPayservice , BankCardPayService 。
四个类的关系如下图所示:
如果此时我需要获取当前系统类所有 PayService Bean,老的方式我们只能通过 BeanFactory或者 ApplicationContex t 获取。
// 首先通过 getBeanNamesForType 获取 PayService 类型所有的 Bean
String[] names = ctx.getBeanNamesForType(PayService.class);List anotherPayService = Lists.newArrayList();
for (String beanName : names) { anotherPayService.add(ctx.getBean(beanName, PayService.class));}// 或者通过 getBeansOfType 获取所有 PayService 类型Map<String, PayService> beansOfType = ctx.getBeansOfType(PayService.class);
for (Map.Entry<String, PayService> entry : beansOfType.entrySet()) {
anotherPayService.add(entry.getValue());}
但是现在我们可以不用这么麻烦了,我们可以直接使用 @Autowired 注入 PayService Bean 数组,或者 PayService List/Set 集合,甚至,我们还可以注入 PayService 的 Map 集合。
@Autowired
List payServices;
@Autowired
PayService[] payServicesArray;
知道了这个功能,当我们需要使用 Spring 实现策略模式就非常简单。
可能有的小伙伴不太了解策略模式,没关系,这类阿粉介绍一个业务场景,通过这个场景给大家介绍一下策略模式。
还是上面的例子,我们当前系统需要对接微信支付、支付宝、以及银行卡支付。
当接到这个需求,我们首先需要拿到相应接口文档,分析三者的共性。
假设我们这里发现,三者模式比较类似,只是部分传参不一样。
所以我们根据三者的共性,抽象出一组公共的接口 PayService ,
public interface PayService {
PayResult epay(PayRequest request);
}
然后分别实现三个实现类,都继承这个接口。
那么现在问题来了,由于存在三个实现类,如何选择具体的实现类?
其实这个问题很好解决,请求参数传入一个唯一标识,然后我们根据标识选择相应的实现类。
比如说我们在请求类 PayRequest 搞个 channelNo 字段,这个代表相应支付渠道唯一标识,比如说支付宝为: 00000001 ,微信支付为 00000002 ,银行卡支付为 00000003 。
接着我们需要把唯一标识与具体实现类一一映射起来,刚好我们可以使用 Map 存储这种映射关系。
我们实现一个 RouteService ,具体代码逻辑如下:
@Service
public class RouteService {
@Autowired
Map<String, PayService> payServiceMap; public PayResult epay(PayRequest payRequest) {
PayService payService = payServiceMap.get(payRequest.getChannelNo());
return payService.epay(payRequest);
}}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/50f880a9061f4f489b3d7f33e2f240d4.jpeg)
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们:
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
去到处搜刮资料自己整理的时间!**
[外链图片转存中…(img-yZp1vuwP-1712916575048)]
Java面试核心知识点
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!