Java版本,JDK和SSH/SSM架构等概念漫谈

Java版本

各个版本的新特性

参见:
https://www.cnblogs.com/peter1018/p/9183959.html
https://blog.csdn.net/ranyuangang/article/details/82855017
https://blog.csdn.net/pursue_vip/article/details/78692584
https://www.cnblogs.com/weiyinfu/p/10941334.html

Java世界分裂为两种:Java8和Java11及以后

Java 9引入了重大变化,包括内部重组,新模块化(称为“项目拼图”),以及删除很少使用的API。Java9的更改破坏了代码,即使是很乐意进行必要修订的开发人员也会遇到依赖性问题。

Oracle JDK和OpenJDK

Oracle JDK

Oracle强烈建议使用术语JDK来引用Java SE(标准版)开发工具包。
在2010年Oracle收购Sun Microsystems之后,这个开发工具包得到了它的当前名称。在此之前,它的名字是SUN JDK,它是Java编程语言的官方实现。

Java SE的历史:
JDK Beta - 1995
JDK 1.0 - 1996年1月
JDK 1.1 - 1997年2月
J2SE 1.2 - 1998年12月
J2SE 1.3 - 2000年5月
J2SE 1.4 - 2002年2月
J2SE 5.0 - 2004年9月
Java SE 6 - 2006年12月
Java SE 7 - 2011年7月

Java SE 8(LTS) - 2014年3月
Java SE 9 - 2017年9月
Java SE 10(18.3) - 2018年3月

Java SE 11(18.9 LTS) - 2018年9月
Java SE 12(19.3) - 2019年3月

根据Oracle的发布计划,自Java SE 10以来,每六个月发布一次新版本,其中,长期支持(LTS)版本的产品发布仅每三年发布一次。

Java SE 11是最新的LTS版本,Java SE 8将在2020年12月之前获得免费的公共更新,用于非商业用途。

OpenJDK

OpenJDK是Java SE Platform Edition的免费开源实现。它最初于2007年发布,是Sun Microsystems于2006年开始开发的结果。
OpenJDK是自SE 7版以来Java标准版的官方参考实现。

OpenJDK的历史:
OpenJDK 6项目 - 基于JDK 7,但经过修改后提供了Java 6的开源版本
OpenJDK 7项目 - 2011年7月28日
OpenJDK 7u项目 - 该项目开发Java Development Kit 7的更新
OpenJDK 8项目 - 2014年3月18日
OpenJDK 8u项目 - 该项目开发Java Development Kit 8的更新
OpenJDK 9项目 - 2017年9月21日
OpenJDK 10项目 - 2018年3月10日至20日
OpenJDK 11项目 - 2018年9月11日至25日

从Java 10开始,OpenJDK项目也将每六个月发布一次新功能。
但是,OpenJDK不存在STL版本,仅支持对发布的更改,直到下一个版本发布。例如,当OpenJDK 11发布6个月后,OpenJDK 12发布时,OpenJDK 11也就不再进行支持版本更新。

OpenJDK和Oracle JDK之间没有真正的技术差别,因为针对Oracle JDK构建过程是基于OpenJDK的的。在性能方面,Oracle在响应能力和JVM性能方面要好得多。由于其对企业客户的重要性,它更加关注稳定性。

OpenJDK由Oracle,OpenJDK和Java Community开发。然而,红帽,Azul Systems,IBM,Apple Inc.,SAP AG等顶级公司也积极参与其开发。
OpenJDK具有GNU通用公共许可证(GNU GPL)是完全开源的,可以自由使用。

其他的JDK实现

参见:https://www.jianshu.com/p/0e3d01b1cac8

Oracle开始对JDK收费

BCL协议和OTN协议

BCL协议,即Oracle Binary Code License Agreement,协议规定你可以使用JDK,但是不能进行修改。私用和商用都可以,但是JDK中的某些商业特性,是需要付费才可以使用的。

OTN协议,即Oracle Technology Network License Agreement,可以私用,商用需要付费。

You may not: use the Programs for any data processing or any commercial, production, or internal business purposes other than developing, testing, prototyping, and demonstrating your Application;

JDK8

甲骨文宣布,在2019年1月之后发布的Oracle JDK 8版本不再免费用于商业用途。

实际上,Oracle发布的新的JDK 8的版本更新8u211和8u212,其许可协议从BCL换成了OTN。

JDK11

JDK11及之后新发布的JDK,都是使用OTN协议。

免费方式概述

  1. 继续使用BCL许可协议的Oracle JDK版本,即JDK8 8u211之前的版本。
  2. 使用OpenJDK 11等版本。(Oracle JDK和OpenJDK构建从Java 11开始基本相同,差异小到可以为普通开发者所忽略。8的话存在差异。)
  3. 除了Oracle的OpenJDK,还有很多免费OpenJDK实现可以用,比如 Zulu,AdoptOpenJDK,Amazon的Corretto和阿里巴巴的dragonwell等等。

问题:

  1. JDK8无法获得之后的更新,那么存在安全性等方面的风险;
  2. OpenJDK同样会每6个月发布一个新版本,不过每次新的版本发布后,旧的就不维护了,比如OpenJDK 12发布之后,11版本便停止更新,停留在11.0.2版本,没有LTS一说。所以,OpenJDK 11同样面临着6个月之后就没有更新的风险。

解决办法:

  1. 使用OpenJDK不断升级到当前的最新OpenJDK版本,以获得不断的更新支持。
  2. 在OpenJDK 11使用6个月之后,从其他的团队组织获取到后续的更新支持,需要自行订阅和进行编译部署更新。(例如,Red Hat声明:RHEL支持OpenJDK7,8,11,支持至少6年。)

JDK、JRE、JVM

JDK即Java Development Kit,是面向开发人员使用的,提供了java的开发环境和运行环境。
JRE即Java Runtime Environment,是面向java程序使用者,是java的运行环境。
JVM即Java Virtual Machine,java虚拟机,是java实现跨平台的最核心部分。

总体关系:JDK包含JRE,JRE包含JVM。

所有的java程序会变编译成.class的类文件,可在JVM上执行。但执行.class类文件时需要调用类库lib,lib存在于JRE中。

Java SE、Java EE、Java ME的区别

JAVA SE

Java2平台标准版(Java2 Platform Standard Edition),主要面向个人PC桌面应用程序开发。这个版本以前称为J2SE。
其中包括:

  1. Java运行环境(Java Runtime Environment, JRE),包含基本类库,Java虚拟机,Applet组件等;
  2. Java开发工具包(Java Development Kit, JDK),是JRE的扩展集,包含Java编译器和调试器等;

JAVA EE

Java2平台企业版(Java2 Platform Enterprise Edition),主要面向复杂的企业级应用,基于JAVA SE。这个版本以前称为J2EE。

Java EE 指定了一套规范,提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。

JAVA ME

Java2平台微型版(Java2 Platform Micro Edition),主要是面向移动设备、嵌入式设备等的开发,基于Java SE。这个版本以前称为J2ME。

Spring和Spring Boot

Spring框架为开发Java应用程序提供了全面的基础架构支持。它包含一些很好的功能,如依赖注入和开箱即用的模块。

Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的XML配置,为更快,更高效的开发生态系统铺平了道路。
Spring Boot只是Spring本身的扩展,使开发,测试和部署更加方便。

Spring Boot特点:

  1. 创建独立的spring应用。
  2. 嵌入Tomcat, Jetty Undertow 而且不需要部署他们。
  3. 提供的“starters” poms来简化Maven配置。
  4. 尽可能自动配置spring应用。
  5. 提供生产指标,健壮检查和外部化配置。
  6. 绝对没有代码生成和XML配置要求。

SSH的没落和SSM的兴盛

SSH框架是Struct+Spring+Hibernate,SSM是指的Spring-MVC+Spring+MyBatis。

两者区别

Struct和Spring-MVC都是负责去转发的,但是两者针对request的请求上面区别很大:
Struct是针对一个Action类来进行请求的,即一个Action类对应于一个请求,所以类拦截,请求的数据类共享。
而Spring-MVC则是针对于方法级别的请求的,也就是一个方法对应于一个请求,属于方法拦截,请求的数据方法不共享。

Hibernate是一个标准的ORM框架(对象关系映射),即完成数据库表和持久化类之间的映射;而MyBatis是针对的SQL-Maping,专注sql本身,需要程序员自己编写sql语句。
MyBatis入门较快,而Hibernate掌握起来相对较难。
针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,sql语句自动生成。因此,Hibernate在不同数据库之间移植性很好,而Mybatis则更容易优化和通过直接修改SQL来以trick方式来实现目标。
实际上,国内流行mybatis,国外反而多用hibernate。部分原因是因为国内的互联网公司,需求变动频繁,要求快速实现,缺少较好的整体设计从而使得应用hibernate比mybatis要低效,人员变动频繁需要降低入手门槛等。

为什么SSH过时了

现在提倡和流行的是前后端分离,前后端数据交互是根据http进行的。
因为现在前端不仅仅是web端,还有app端等,而app是没办法通过模版进行渲染的,只能通过http传输数据。这也是后端服务发展的趋势。

JSR-311标准出台之后,随着Restful方式的流程程度普及开来,struts2逐渐淡出人们的视线,虽然struts2也加入了一些plugin来进行支持REST,但在应用的过程中也较为繁琐。

Spring以IOC为核心,在功能上做了一些扩展,先后推出了SpringMVC来完成逻辑层的编写逻辑,经过几年的发展,现在后端基本被Spring系列所统一。

发布了193 篇原创文章 · 获赞 23 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/zhiyuan411/article/details/102332195