如何把Spring学精通?
Posted 一只会飞的泡泡鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把Spring学精通?相关的知识,希望对你有一定的参考价值。
作为 Java 后端工程师,几乎都要用到 Spring,今天这篇文章是和大家说说如何学好 Spring。
在之前的一篇 Java 读书路线的文章中,我介绍过 Spring 的读书路线:
虽然 Spring 变化确实很快,但是,它有几个地方,是这么多年几乎没发生过什么变化的。
没有什么变化的第一部分,就是 Spring 的设计思路。Spring 的设计思路,永远都是作为 Bean 的容器,去管理好 Bean ,这是它永恒不变的地方。
没有什么变化的第二部分,就是 Spring 的内核。Spring 的 ApplicationContext 等核心 API 是没有什么大的变化的。
所以,咱们就应该先从 Spring 这些不变的核心先入手。掌握住 Spring 的思想,Spring 的内核,哪怕 Spring 本身再变化,对咱们来说,也只是一种外在的 API 变化而已。
要达到这个目的,我会推荐大家看一本很老的书《Spring揭秘》
虽然这本书主要是以 Spring3 的讲解为基础,但是,这本书对于 Spring 的编程思想讲的极为透彻,是有关 Spring 的书中,难得一见的好书。入门 Spring,这是我推荐的第一本书。
理解了 Spring 的编程思想不够,我们需要利用这些思想,去实践演练,加强我们对 Spring 的理解。
这时候,就得有本书,能真正的带我们实战下Spring的各个组件——《精通Spring 4.x》
现在 Spring 5 在逐渐进入主流,但是 Spring 5 也只是在 Spring 4 的基础上增加了一些新特性。
理解了 Spring 的理念,用很多代码练习练习实践之后,我们就只需要知道 Spring 5 的一些特性就能跟上 Spring 发展的步伐了。可以看下《Spring 5 开发大全》,这本书对 Spring 5 的新特性介绍很全。
关于 SpringBoot,由于它的易用性,它已经迈入主流。不过 SpringBoot 也只是以 Spring 为内核的一套应用框架而已。找本书,学习它是如何通过添加一些模块和功能,去降低大家使用 Spring 的门槛的,也就够了。可以读下《Spring Boot 2实战之旅》。
接下来说说学Spring的具体步骤:
一、找到最核心的内容
学好 Spring 的第一步就是:从以上书籍或者其他书籍、资料文档中,找到 Spring 庞大的知识体系中最核心最重要最值得学习的知识点,抽取出来形成学习清单。
例如,我提取的核心知识点是:
1. Spring 到底是如何管理对象的
我们使用 Spring 的时候,大部分其实都是在使用 Spring 的核心容器功能。
Spring 的容器功能就是通过 BeanFactory 和对应的子类各种 xxxContext 去存储管理对象。
这个知识点是 Spring 发展至今一直没有变化的核心知识。
2. Spring 注入对象的方式和对应原理
当 Spring 成为对象容器后,它本身最重要的目的就是要去对系统中各种类进行对象注入。而工作中最常见的问题,就是 Spring 注入对象的各类问题。
也因此,广泛了解 Spring 注入对象的各类方式,从而能更加灵活地运用 Spring,深入理解注入对象的对应原理,从而能顺利无误地使用 Spring,就是我们深入学习 Spring 的重要目标。
3. Spring 是如何管理对象之间的依赖关系的
除了使用完整对象的注入以外,工作中,我们还需要考虑对被注入对象属性的动态修改,可能还想要动态地注册新的 Bean 对象等等。
而要做到这些,我们就必须去了解 Spring 是如何管理对象之间的依赖关系的。
4. AOP 的实现原理以及对其的内部使用
AOP 在 Spring 项目中被广泛用于权限、错误处理以及日志追踪等关键场景。
尤为重要的是,Spring 项目中的所有相关数据库事务,也都是通过 AOP 来管理和传播的。
所以对 AOP 的学习也颇为重要。
5. Spring 的扩展点有哪些以及如何做
很多时候,我们需要把公司的一些内部框架和系统嫁接到 Spring 中。为了减少开发成本,就要自定义一套完整的 Spring 扩展,比如:自定义注解、自定义配置类等。
想做到这些,就必须知道 Spring 有哪些扩展点,可以做什么扩展以及怎么做扩展。
6. Spring MVC 的体系和重要类的作用
哪怕现在大家都使用 SpringBoot 了,但是,只要我们在用 SpringBoot 的 Web 功能,其实就是在和 SpringBoot 背后内置的 Spring MVC 打交道。
Spring MVC 本身有一套复杂的体系,从请求到响应,有一套完整复杂的流程。只有了解这些流程和 Spring MVC 的体系,我们才能顺畅使用 Spring MVC,去解决 Web 项目中各种看起来很奇怪的问题以及作出新的扩展功能,比如,项目中的国际化出现的各种乱码问题,统一错误处理问题等。
7. Spring Boot 是如何自动配置好类的
Spring Boot 本身就是以 Spring 作为对象容器,以 Spring MVC 实现 Web 功能的一套缝合框架。学习了 Spring 和 Spring MVC 之后,我们就理解了 Spring Boot 绝大部分功能。
但是,Spring Boot 是如何把 Spring 中的各个组件缝合在一起的?其中重要的思想就是自动配置。
所以,学习了 Spring Boot 的自动配置,我们就能从头到尾完整的了解 Spring Boot 的整体体系结构和相关对象管理流程。
提取出学习内容后,强烈建议大家学习中记下我们的笔记和思考,并定期复习。
说明一下:除了上述知识点,有一些知识点我没说,例如:Spring MVC 中我并没有提及拦截器,也没有提及Spring Boot 中常用的各种注解。
之所以没说,是因为这些内容,是 Spring 必须内容,你绕不开他们。而我提及的这些,则是 Spring 学习中,大家经常不知所措,也不知道要学的那些重要内容。
二、做一些实际练习
学习上面知识点的过程中,应该结合实际的一些场景,再做一些练习。这里我对应每个知识点给出一些练习建议,大家可以照着做一下。
-
写一个使用 AnnotationConfigApplicationContext 去获取对象的测试用例:写这个测试用例的目的是,让我们能更加清楚地理解 Spring 是如何用容器管理对象的。
-
写一个能使用 FactoryBean 去产生一个对象的测试用例:目的是想让大家明白,Spring 创建对象并不止是一种方式,大家可以多了解下其他的创建对象的方式,同时也多多思考。
-
写一个能在 Spring 中动态新增对象的测试用例。
-
写一个能在 Spring 中动态删除对象的测试用例。
-
写一个能在 Spring 中动态修改Bean属性的测试用例。
以上的测试用例,我建议大家使用 Spring 中的相关 BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor 等内部对象来实现,而不是简单的从容器中获取 Bean,然后采用反射去修改对应的值或者对象。
我们写这几个测试用例的目的是为了让大家对 Spring 是如何管理对象以及对象依赖关系的,有更进一步的体会。
-
写一个能观察 Bean 的生命周期的测试用例:目的是能让大家进一步了解 Spring 对象的管理。这个测试用例尽量写全,生命周期观察的越细致越好。比如,我们不仅要实现 init 和 destroy 方法,还要采用 BeanNameAware、InitializingBean 等方式,去尽量把完整的 Bean 生命周期展示出来。
-
写一个或者几个能用 AOP 功能的测试用例:加深对 Spring AOP 的理解的,最好是把 AOP 中的前置通知、后置通知、返回通知、异常通知、环绕通知都实现一遍,并通过调试,把整体的 AOP 流程搞得非常清楚。
-
写一套自定义注解并附上对应的测试用例:现在大家都使用 SpringBoot 了,普遍采用扩展 Spring 的方式就是自定义注解。所以,要理解 Spring 的自定义扩展点,就是要理解 Spring Boot 是如何做到自定义注解的。加载自定义注解,处理自定义注解,最好是通过写出自定义注解的测试用例,然后一步步调试观察出整个流程来。
-
写一个能手动映射 DispatcherServlet 路径的测试用例:在 Spring MVC 中,DispatcherServlet 是所有 web 请求的第一关卡,是非常核心的类。写关于 DispatcherServlet 的测试用例,我建议要想办法通过编码而不是配置去把 DispatcherServlet 相关的路径映射等功能做出来。这对我们理解 Spring MVC 的请求路由,请求映射以及相关核心类的加载和使用都非常重要。
-
写一个自定义的 HttpMessageConverter 加对应的测试用例:自定义 HttpMessageConverter 是我们在使用 Spring 做 web 开发经常要做的一件事情。通过写自定义的 HttpMessageConverter,以及对应的测试用例,对我们理解请求是如何被转化成 Java 对象,Java 对象又是如何转化成我们定义的响应内容格式的这个关键流程是非常重要的。
-
自定义一个 WebDataBinder 并让它生效:使用了 HttpMessageConverter 去转化请求和响应,其中核心的一点是:在请求时如何把参数去绑定到对应的 Java 对象上。而在绑定参数过程中,数据校验也经常和 WebDataBinder 混合在一起。所以理解 WebDataBinder,能更好理解 web 请求到 Spring 中 Java 对象的转化机制。
-
画一张从请求到响应的 Spring MVC 所用到的类的流程图:了解了 Spring MVC 中的几个核心重要类,我们就可以把这些重要类关联起来,并结合一些 Spring MVC 中别的相关类,共同构造出一幅完整的请求-响应流程图,从而加深我们对 Spring MVC 整个体系的理解。
-
自己实现一个 Spring Boot Starter:对于 Spring Boot,我们本身最重要的是去理解 Spring Boot 是如何通过自动配置,把各种 Spring 组件结合在一起的。而这种自动配置,其实就是通过各个组件写自己的 Spring Boot Starter 来完成的。自己实现一个 Spring Boot Starter, 我们就能理解到 Spring Boot 的自动配置、自动加载方法。
三、通过项目融会贯通
做了练习后,我们就要通过一些小项目,去把学到的 Spring 知识融汇贯通,串联到一起。我推荐做两个简单的项目:
第一个项目是做一个简单的模拟银行项目,需求如下:
- 可以检查余额
- 可以存款
- 可以退款
- 可以看到交易流水
- 可以计算利率
- 能优雅的退出应用
第二个项目是做一个简单的员工管理系统,需求如下:
- 可以统计出今年的新员工有多少
- 输入员工姓名的部分字,提示可能的全名
- 每个员工有五位的员工编号
- 员工有自己的部门和上级
- 可以显示员工在职,离职状态
- 有员工信息页面,可以显示员工编号,姓名,部门以及状态
以上就是我自己总结出来的学习 Spring 的方法。
另外我还想提醒大家一句,学习 Spring,是为了我们的工作服务的。所以,除了学习 Spring 本身,这里,我还建议大家要经常关注一些 Spring 的实践问题。把一些印象比较深的错误和对应的解决办法汇总起来,看看有没有什么办法能通过修改框架,增加约束,去减少这些错误的发生。
在从事技术的路上,我希望能一路分享给大家我自身的经验。作为多工作了几年、多走了一些弯路的过来人,我希望能通过分享这些学习方法,为大家撑起一把伞,陪伴着大家一路前行,毕竟,撑伞者也是雨中人,我们大家都只是在雨中砥砺前行而已。
你好,cc
一家上市公司的技术总监,管理的技术团队一百余人。
我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。
我会把自己的成长故事写成文章,把枯燥的技术文章写成故事。
讲真,要能把功能测试学精通,月薪2W还真不是梦想
经常在知乎、贴吧等一些地方,听到一些言论说:“功能测试行业已经饱和啦?”“做功能测试如何如何没有前途?”“做了几年就会被淘汰什么的?”听了这些言论,很多计划转行的新人有的暗自庆幸自己还没转行,有的则是无奈,心中长叹又少了一个可以转行的职业。
那么,事实究竟是怎样的呢?是不是做功能测试就一定没前途呢?
01 改变认知:普通岗位也能出个高凤林
对于我们大多数人来说,我们都是普通人,从事的岗位也多是普普通通、平平凡凡的岗位。但千万不要小瞧了你所在的普通岗位。
前段时间,航空局曝光了一位功勋卓著的普通人——神舟十一号飞船制造一线员工,焊接工人高凤林。凭借自己多年积累的经验和学习,他虽然只是一名最基层的火箭焊接工人,但却也是最高级别技术分析会上被指定参与制定高级别焊接质量标准的工作人员。
普普通通的焊接技术,被练到炉火纯青后,尚且能为国家立下“三等功”,被破格授予他特级技师的头衔。更何况是时下互联网+时代中的一门IT技术了!功能测试自然练到炉火纯青,从业者自然也能得到应有的荣光。
笔者以为,对于功能测试从业者来说,“坐吃山空”本确实容易被淘汰的,有此一虑也实属应当,但若你能成为“吃老本”的人中,最精通的、效率最高的那一个,那么,你也可以成为IT界的高凤林。
相信我,没有哪个精通某一行业的技术人员会被淘汰的。真正会被时代淘汰的,一定是那些“半吊子”选手——技术不扎实,但总喜欢一惊一乍,自己吓唬自己的那种。
对于新时代的IT岗位的技术人员来说,要么,你就保持终身学习的观念,不断拓新自己的技术,让自己走在技术的前沿领域;要么,你就把自己会的技术做到精通,或者说是干一行行一行。
而这两条职场发展之路,你必须选一条,否则被淘汰也只是时间的问题。你说是不是?
02 技能提升:精通才是王道
好了,接下来话不多说,分享功能测试中的一些常用的测试方法给大家,希望大家能在入行初期,把知识点掌握扎实。毕竟,有了量变,才能实现质变的突破。
对于功能测试就来说,在做产品的各功能进行验证时,我们需要根据功能测试用例,逐项测试、检查产品,从而确保产品达到用户要求的水平。
那么,有哪些测试方法是我们日常需要注意的呢?
功能是否可以正常使用
1)按钮功能:如delete、cancel、update、save等按钮,功能是否正常,是否可以使用;
2)删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理;
3)search检查:在有search功能的地方,我们继续要输入系统存在的内容,也需要输入不存在的内容,看search是否可以正常输出结果;
4)页面链接:每一个链接是否都有对应的页面,并且页面之间切换正确;
5)中文字符:在特定位置输入中文字符,看会否会被执行,会不会出现乱码等;
6)重复提交:成功提交一条纪录后,返回再次提交,看看系统是否会再次执行;
7)字符串长度:在指定位置,输入超出长度的某些内容后,看看系统是否可以执行;会不会报错;
8)输入信息位置:在光标停留的地方输入信息时,查看是否可以正常输入内容;确定在光标处输入信息后,会否跳到别的地方。
功能是否可以正常执行
9)标点符号:在应该输入标点符号的地方,测试特定标点符号是否会被执行,包括但不限于:空格,中英文引号,回车键等。并查看系统是否可以正确处理。
10)字符类型:在应该输入指定类型内容的地方,输入其他类型的内容,查看系统是否会执行;是否会提示输入了错误类型的字符;
11)信息重复:在一些需要命名,且名字应该是唯一信息的地方,输入重复的名字或ID(重名包括:是否区分大小写;有空格时是否算作2个名字等),查看系统是否亦可以正确执行;
12)重命名:修改名称时,把不能重名的项改为已存在的项,检查是否可以执行,是否会报错;
13)多次使用back键:在可以执行back的地方,多次重复执行back,检查是否会被执行,是否会报错;
14)search功能:在有search功能的地方,我们继续要输入系统存在的内容,也需要输入不存在的内容,Search出的结果是否正确;如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确;
15)回车键:在输入结束后,直接按回车键,查看系统是否会执行;
16)必填项:是否对必填项增加了提示信息,如在必填项前加*。必填项没有填写完成,是否可以继续执行;
17)上传下载文件:检查文件是否可以正常实现上传下载的功能,上传或下载的文件是否能被打开;
执行某些行为后,是否对其他功能造成影响
18)添加和修改的一致性:检查添加和修改信息的要求是否一致。例如,添加规定为整型的项,修改也必须为整型;添加要求必填的项,修改也应该必填。
19)带出信息的完整性:在查看信息(包括update信息)时,检查结论信息是否包含了所有已填写的信息,确保带出信息和添加信息的一致;
20)项与项的相关性:增删一些项后,会不会对其他项产生影响;若产生影响,会造成哪些结果;
21)快捷键:设置的快捷键是否可以正常执行,有没有因被占用导致无法执行的问题。另外,检查是否对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制;
22)上传下载文件:检查上传文件格式是否有明确地规定,系统是否有解释信息,并检查系统是否能够做到正常判断识别。若上传的内容是符合格式要求的病毒,是否可以被检测到;
03 做好归纳总结
对于我们在日常工作中碰到的问题,以及对应的解决办法,一定要做好相应的归纳总结。都说好记性不如烂笔头,很多时候,我们总以为我们能清晰的记得自己在特定时间做的特定内容,但其实过不久,就容易遗忘。所以最好的办法,就是记录下来,提示自己不要忘记。
另外,功能测试本就是个细致的活儿,并不是谁都能快速找出bug,也不是谁都能知道哪里容易“翻车”,所以,一定要总结一些心得体会,时不时地拿出来看看,唤醒自己的记忆。
只有这样,日积月累下去,你的技术才会更加炉火纯青。
下面是我对于软件自动化测试技术一些归纳和总结,希望能帮助到有心在技术这条道路上一路走到黑的朋友!附带教程学习资料~
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你
关注我的微信公众号【伤心的辣条】免费获取~
送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
我的学习交流群:902061117 群里有技术大牛一起交流分享~
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
好文推荐:
以上是关于如何把Spring学精通?的主要内容,如果未能解决你的问题,请参考以下文章
Java之Spring入门到精通IDEA版Spring的IoC和DI(一篇文章精通系列)
Java之Spring入门到精通IDEA版Spring的IoC和DI(一篇文章精通系列)
Java之Spring AOP入门到精通IDEA版(一篇文章精通系列)