不会Spring,不谈就业——学习SSM和Spring Boot
小编说:很多人名义上是学习Spring Boot,其实学的是Spring、Spring MVC、MyBatis等框架的内容,这种方式的学习实际上带有一定误导性,如何学习SSM和Spring Boot呢?本文给出了三点建议。
01
Spring Boot和SSM的关系
如果你要问我,现在开发企业级的应用是否应该使用Spring Boot框架?
我的回答是肯定的。不仅如此,我甚至推荐将原来基于S2SH、SSM开发的项目都重构成基于Spring Boot的——前提是你有扎实的技术功底,不担心重构过程中引入一些未知的错误、最后导致项目出错。
▊ 为何如此推崇Spring Boot?
这是由企业开发的特性所决定的,对于企业开发来说,必须追求稳定性和快捷性,而Spring Boot的作用是什么?
Spring Boot是一个快速整合和自动配置的脚手架框架。
形象地说,Spring Boot就像一种快速、有效的“万能胶”,它几乎能将Java领域的所有框架与Spring框架迅速地整合在一起,而且由于Spring Boot为这些框架的整合提供了自动配置功能,因此整合它们几乎不需要提供额外的配置信息——不仅不需要提供XML配置,甚至连注解都可以省略。
当然,Spring Boot依然保留了扩展接口,因此开发者依然可使用传统的Spring配置文件来提供额外的自定义配置,这意味着开发者既可充分利用Spring Boot自动配置的便捷性,也可保留Spring传统配置方式的灵活性。
简单来说,使用Spring Boot框架进行开发无非就是以下两个优点:
快速整合
自动配置
▊ Spring Boot能做其他事情吗?
不能!Spring Boot本身并没有提供其他功能性的东西,Spring Boot它只是一瓶强大的“万能胶”,如果你希望这瓶“万能胶”能发挥作用,那么你至少要有一些东西用来被“万能胶”去粘。
伴随着Spring Boot的广泛应用(正如前文我所推荐的,我也极力推荐使用Spring Boot),所以有一些菜鸟(尤其是那些刚工作几年的菜鸟)往往跟着以讹传讹地传递一个错误的观念:SSM过时了、Hibernate/JPA过时了,现在只要学习Spring Boot就够了。
正如前文所介绍的,Spring Boot的目的无非是两个:快速整合和自动配置,如果没有Spring MVC、没有Spring、没有MyBatis、没有Hibernate/JPA……等框架,那Spring Boot整合谁呢?
懂得了SSM(Spring MVC+Spring+MyBatis)与Spring Boot的关系之后,自然就能明白认扎实掌握SSM的重要性。反过来,有了扎实的SSM基础之后,再去学习Spring Boot所提供的快速整合和自动配置功能,就不至于流于表面的学习,而是能真正掌握Spring Boot的底层实现机制和原理。
实际上,如果你查看Spring Boot框架的官方文档,会看到如下文字:
“Automatically configure Spring and 3rd party libraries whenever possible(尽可能自动配置Spring及第三方框架)”。
这段文字说过Spring Boot能代替Spring及第三方框架吗?没有。Spring Boot所做的只不过是尽可能地自动配置Spring及第三方框架,这句话本身就说明了Spring Boot强烈地需要Spring及第三方框架,否则Spring Boot自动配置谁呢?
网络上那些以讹传讹的菜鸟,他们学习Spring Boot,通常只是学习了一些皮毛。很多时候,他们以为自己在学习Spring Boot,但其实不是。比如很多图书名义上说介绍Spring Boot,实际上却对@RestController、@PathVariable、@MatrixVariable 等注解讲了一通,这些内容属于Spring Boot吗?你只要看一些这些注解所在的包,就会发现它们和Spring Boot没有半毛钱的关系。
如果非要说这些注解和Spring Boot有关系,那就是它们都属于被Spring Boot整合的框架,如果从这个角度来说,那Spring Boot几乎能和Java领域所有框架都有关系了——前文Spring Boot的官方文档都已经说了:“尽可能自动配置Spring及第三方框架”,因此Spring Boot能快速整合、自动配置的框架恐怕比绝大部分开发者知道的框架还要多,难道这些框架都属于Spring Boot?
由此可见,不管你是否意识到:只要你打算认真学习Spring Boot,就不可能避免学习Spring、Spring MVC、MyBatis、Hibernate/JPA……这些框架——因为Spring Boot只是去整合这些框架,但真正起作用的依然是SSM这些框架。
从实际开发的角度来看,Spring Boot所能做到事依然是快速整合和自动配置。在项目搭建阶段,借助于Spring Boot的快速整合,开发者可以快速地搭建出一个企业级项目;在项目开发阶段,Spring Boot的自动配置功能可以减少配置信息的书写,但开发阶段依然还是要开发各种应用组件,依然要实现业务逻辑,依然要去访问数据库,实现这些功能还是要用到Spring、Spring MVC、MyBatis、Hibernate/JPA等框架。
换而言之,对于实际开发而言,开发者往往并不需要真正与Spring Boot打交道,真正用到的反而是Spring、Spring MVC、MyBatis、Hibernate/JPA等框架,因为它们才是真正干活的框架。
02
不会Spring,不谈就业
新名词往往容易让人眼花,但沉淀下来的才是真正的“大佬”。如果你问我学精Java就能就业吗?我会扎扎实实地告诉你一个否定的答案!
当你问到“学精Java”这个前提时,已经说明了你可能还不知道Java所涉及的知识面有多广,全世界绝大部分企业级应用的后端程序,几乎都是Java在支撑,如果你还只是把Java当成一门孤立的编程语言,那你已经错了。
Java是一个庞大的生态圈和解决方案,它涉及大量的应用领域,比如后端开发、分布式开发、大数据、人工智能……;它也涉及无数的框架和技术:Spring、MyBatis、Hibernate/JPA、ActiveMQ、RocketMQ、ZooKeeper、Hadoop、Kafka、Flink、Spark、Lucene、Solr/ Elasticsearch……
在Java这个庞大的生态圈和解决方案中,Spring是什么地位?
Spring就是Java开发领域的垄断,因此:不会Spring,不谈就业。
从2002年面市至今,Spring即将走过近20年的历程,它逐步变得愈加强大、几乎已经占据了Java开发领域的垄断地位。
Spring框架的垄断地位,可以从两方面体现出来:
不管你打开哪个公司的Java招聘需求,都会看到Spring是必须掌握的开发框架。这也从侧面证明了:不会Spring,不谈就业。
不管你学习哪个框架,你会发现这个框架总要与Spring整合在一起,这就体现了Spring在Java领域的核心地位。
学习Spring的意义不仅在于开发,Spring作为Java领域占垄断地位的框架,其优秀的设计、值得每个开发者认真揣摩。开发者学习Spring,不仅应该熟练掌握它的用法,更应该从源代码层次认真学习。
不少开发者希望提高自己的架构设计方面的知识,或希望深入学习设计模式,而Spring在这两方面同样也是极好的范例,认真阅读、学习Spring框架的源代码既可提高学习者在架构设计方面的能力,而且Spring源代码在设计模式的应用方面也是教科书级的示范,只要开发者认真理解Spring源代码,自然而然就能掌握这些设计模式。
03
SSM学到什么程度算真正掌握?
相信现在大家应该已经明白了一个事实:很多人名义上是学习Spring Boot,其实学的是Spring、Spring MVC、MyBatis等框架的内容,这种方式的学习必然是“快餐式”,首先学习所用的资料本身就是残缺的、带有一定误导性的;其实学习者的学习方向也是错误的。
学习Spring Boot就应该重点学习它本身的功能:快速整合和自动配置,因此学习Spring Boot应该重点掌握它是如何快速整合Spring及大量三方框架的,并学习Spring Boot自动配置所依赖的具体实现和底层原理,这才是学习Spring Boot的正确姿势,而不是抱着@RestController、@PathVariable、@MatrixVariable等注解瞎搞一通,因为这些东西与Spring Boot并没有太大的关系。
可能有初学者会说,可是我还还没有掌握@RestController、@PathVariable、@MatrixVariable等注解的相关知识啊,那么你应该去认真学习IoC、AOP、Spring MVC、MyBatis、Hibernate/JPA等框架(掌握它们的最小交集就是SSM), 而不是指望通过学习Spring Boot掌握它所有能整合的框架。
对于Spring学习而言,重点要掌握的就是IoC和AOP两个核心技术,而这两个核心技术都是由Spring容器表现出来的,因此学习Spring的关键就是尽可能深入地掌握Spring容器和容器中的Bean。
对于一个熟练的Spring使用者而言,他至少要明白Spring容器的本质是什么。
IoC也好,AOP也罢,都只是一个名词,Spring容器的本质无非就是通过XML或注解来驱动底层以反射执行Java代码。因此如果说Spring用得很熟练,至少要完成如下的自由转换:
XML配置(注解) <----> Java
也就是说:无论你看到什么样的XML配置(或注解),都能迅速知道Spring容器会在底层对应执行怎样的Java代码;反过来,给你任何一段Java代码,你都应该能将它使用XML(或注解)配置出来。达到这个程度之后,Spring才算用得比较熟练,这时再去学习Spring MVC也好、学习Spring Data也好、学习Spring Boot也好、学习Spring Cloud也罢,一般都能迅速明白它们的运行机制,而不是停留在表面的“依葫芦画瓢”。
更进一步,要达到精通Spring的程度,最好的办法还是建议阅读源代码。正如前文提到的,Spring框架的源代码在架构设计和设计模式方面都具有极高的可参考性,因此阅读、并理解这些源代码不仅能迅速提高学习者在架构设计方面的能力,也能让开发者真正掌握设计模式在开发中实际应用,而不是停留在背诵设计模式包含哪些组件的层次。
对于MyBatis而言,首先要理解MyBatis的本质是SQL Mapping框架,它并不是真正的ORM框架,因此它的核心就是完成SQL查询和Java对象的映射,因此学习MyBatis的关键就是尽可能全面、深入地掌握SQL查询的各种映射方式。
对于一个熟练的MyBatis使用者而言,他必须能熟练掌握各种查询方式、包括关联查询、子查询、存储过程调用等各种方式的SQL映射。
此外,由于数据库访问是应用性能的关键部分,因此深入学习MyBatis还应该了解各种映射方式可能带来的性能缺陷,掌握在不同场景下使用不同的映射方式,包括如何避免MyBatis在查询过程中产生的“脏数据”。要能通透地掌握这些机制,同样需要学习者对MyBatis部分核心组件的源代码实现,只有当你真正理解了这些源代码实现,才能更好地对MyBatis的数据访问进行针对性的优化。
本文作者李刚,十余年软件开发从业经验,疯狂Java体系原创图书作者。
CSDN特邀讲师,在CSDN开设的课程上线迅速销量过万份。
李刚老师亲自培训的学生已在腾讯、阿里、华为、IBM、网易等名企就职。
国内知名高端IT技术图书作家,已出版《疯狂Java讲义》、《疯狂Android讲义》、《轻量级JavaEE企业应用实战》等著作。其中《疯狂Java讲义》销量达几十万册,被北大信科老师实名推荐并先后选作教材及参考书,此书已被翻译成繁体中文版,授权到宝岛台湾。
更多科技资讯请见微信公众号:博文视点Broadview(微信号:bvbooks)