欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于Java学习的一些补充

程序员文章站 2022-03-30 21:19:53
最近写过些Java学习相关的文章。发布之后,通过留言或私信,我又收到了不少很有价值的问题。所以就通一整理分享下。 关于Spring Boot Spring Boot是目前学习和应用的热点,所以就有不少人说:“Spring和Spring MVC已经过时,不需要再学习了”。 在我看来,上面的观点是极端错 ......

最近写过些java学习相关的文章。发布之后,通过留言或私信,我又收到了不少很有价值的问题。所以就通一整理分享下。

关于spring boot

spring boot是目前学习和应用的热点,所以就有不少人说:“spring和spring mvc已经过时,不需要再学习了”。

在我看来,上面的观点是极端错误和不负责任的。

从设计目标来说,spring boot只是实现了spring的自动化配置,降低了项目搭建的复杂度。

从技术上说,spring boot的底层依然是spring的核心机制,包括ioc、aop,以及实现者 - spring容器。所以,spring boot作为一个承载者。如果承载的是web项目,spring mvc该怎么工作,还是怎么工作。

与“传统”程序不同,spring应用主要通过配置、注解,然后由spring容器统一装配运行。因此,如果程序员不能对底层机理做到“了然于胸”,则对整个系统的运行逻辑必然是“云里雾里”。

因此,在实际项目中,spring系统一旦出了问题,许多“半吊子”程序员就会感到不知所措。为了快速“解决”问题。只得在spring配置上胡乱折腾。所以到最后,很多spring程序(包括业界著名公司)都被改的面目全非,腐败不堪,充斥着各种冗余和冲突。

而spring boot虽然简化了spring配置,但同时也使程序离spring本质越来越远。整个程序的运行逻辑更加“云里雾里”。一旦出了问题,更加令人不知所措。

所以,从程序的健康出发,从程序员的职业发展出发。spring boot的开发者,反而更有必要掌握spring的底层原理,正所谓“无真相不*”。

而且,以我的经验。如果你扎扎实实从spring基础一路走来,到了spring boot这里,也就是“临门一脚”的问题。因此,学习spring,最“正”的路径依然如下:

spring -> servlet -> spring mvc -> spring boot

jpa与hibernate

jpa作为一个持久化规范,仅定义了or映射的规范(包括一系列注解),但本身并没有具体的实现。

在实际应用中,jpa的具体实现既有hibernate,也可以通过spring和把jpa和mybatis结合起来。但因为hibernate的高可配性,因此从概念设计上来说, hibernate对jpa的实现显得更加“自然”。

但是,无论是业界还是我本人,偏爱mybatis的原因和jpa关系不大,关键是因为hibernate相对不够灵活,从而带来的高学习成本和调优成本。

当然,毫无疑问,hibernate是一个非常优秀的框架。至于你所在的团队是否选择它,肯定是综合考量的结果。其中既包括团队的技术现状(例如是否有hibernate大牛),也包括项目的规模,及灵活性需求等。

而在其他文章中,我对hibernate的观点,主要是针对高效学习来讲的,毕竟人的精力是有限的。

关于大数据

前面的两篇文章,面向的主要是java web开发者。

当然,java开发,除了web,还有大数据等方向。虽然都是学习java,但内容肯定有所偏重。这里我就简单阐述下,以免对其他方向(例如大数据)的学习者有所误导。

做大数据开发,无论是做hadoop的map reducer,还是storm的topology(拓扑),最常见的实现方式还是java。从这一点来说,对java基础知识的学习,大家都是一样的。

但差别在是否要学习spring?这决定于你对自己的定位!

如果你把仅自己定位在数据处理上,只需编写map reducer或topology,那么你完全可以不学习spring。

但是,一个完整的大数据系统,必然是一个综合系统。其中包括系统配置、数据的收集、传输、存储、展示等子系统。而如何把这些子系统整合成一个综合系统,则是spring的专长,这也是javaee面临的核心问题。

因此,从系统开发角度来说,大数据开发者依然应该学习spring。只不过从优先级上来说,完全可以把spring往后排一下。

最后

上面是我的一家之言,肯定有错谬之处,见谅!

祝好!