有了SpringBoot,还有学习SSM的意义么?
01⼁Spring Boot和SSM的关系
如果你要问我,现在开发企业级的应⽤是否应该使⽤Spring Boot框架?
sql自学难吗我的回答是肯定的。不仅如此,我甚⾄推荐将原来基于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的数据访问进⾏针对性的优化。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。