当前位置: 首页 > news >正文

JAVA EE,一文彻底聊明白

关于JAVA EE的论述,JAVA EE和Spring的论述在第二、三章节。

目录

1.JAVA的发展史

2.JAVA EE

3.JAVA EE和Spring


1.JAVA的发展史

JAVA语言于1995年面世,主要开发者为——James Gosline,后被称为JAVA语言之父。最早该语言叫Oak,在注册商标时,发现Oak已经被人使用,由于开发小组的成员当时在喝一款叫做JAVA的咖啡,于是将该语言命名为Java。至今JAVA的图标还是一杯咖啡。

JAVA分为两部分:

  • JRE
  • JDK

JRE:

Java Runtime Environment (Java运行环境),里面包括JVM——Java Virtual Machine (Java虚拟机)和一些基本的类库。

JDK:

Java Development Kit( Java 开发工具包),里面包括JRE,并额外增加了Java开发所必须的工具和类、库。一般说的JAVA版本就是指JDK的版本。

随着开发领域的细分,JAVA为了适应这种趋势,在1999年将JDK拆为3个版本:

  • J2SE
  • J2ME
  • J2EE

J2SE:

JAVA标准版,也称为JAVA SE。包含JAVA最通用的类库。

J2ME:

JAVA移动版,针对移动手机、机顶盒、外设,此类与硬件开发相关的场景。

J2EE:

面向企业版,现在已经改名为Java EE。

2.JAVA EE

99年sun公司为了避免开发的混乱,希望能在企业级应用上定一个规范,大家使用JAVA开发企业级应用时都遵循这种规范,使得系统具有清晰的层级便于维护和扩展,这个规范就是:

企业级应用是容器+组件的方式来提供服务的。

企业级开发其实要涵盖的东西很多,比如要涵盖网络通信、安全、多线程并发等等,这些问题要是都在企业级开发中每次都由开发人员去处理是很麻烦的,于是sun公司希望这些基础的共性的东西由容器去管理,而个性化的东西,如业务由组件去管理,由容器+组件的方式来提供服务。为了上面这个思想下诞生的东西能形成一个生态,于是sun公司定义了一系列规范,规定了容器该怎么做?做什么?组件该做什么?怎么做?容器和组件怎么合在一起?这一系列的规范就是JAVA EE规范。

整个JAVA EE其实分成两大块,容器和组件,各个开发商去根据规范开发容器,如tomcat、jetty等。开发者去开发组件,运行在容器中。由于容器满足了统一的规范、组件满足了统一的规范、容器和组件如何合在一起跑也满足了统一的规范,这样组件就可以跑在不同的容器中:

JAVA EE发展至今规范已经有四十多种,其一开始推出的规范有13个:

JDBC、EJB、JAVA RMI、JNDI、JMAPI、JMS、JTS、JMF、Annotation、JavaBeans、javaFX、JMX、JPA

这13个规范被称为JAVA EE十三大规范,有时也被简称为JAVA十三大规范,但JAVA十三大规范这种说法并不准确,这十三大规范只是针对J2EE场景的。

3.JAVA EE和Spring

一开始的时候按照标准的全套JAVA EE标准实现的架构如下:

后端服务器有两个,Web Container负责产生HTML页面、EJB Container负责业务逻辑,两个服务器之间通过RMI来相互调用。

 

2002年10月份,rod johson出了一本书《export one to one J2EE Development without EJB》,其中提出了一个疑问EJB Container中能做的事情,Web Container里完全可以做,那为什么一定要EJB Container?于是他自己写了一个框架并且利用此框架完整的开发出了一个系统,他自己这个框架里第一次提出了IOC和AOP。

rod johson此次尝试相当于是只采用了Web Container+ 自己的IOC和AOP,也就是说他只采用了一部分JAVA EE规范,舍弃掉了他觉得不合适的。

这本书影响很大,大家突然反应过来,其实完全按照JAVA EE规范来开发其实是很繁琐的,完全可以只采用一部分JAVA EE规范也可以做出一个系统。

后来根据rod johson书里的框架他和另外两个合作者一起做出了Spring。

Spring的出现颠覆了JAVA开发的体系架构,尤其是IOC,堪称大杀器,将后端业务逻辑从重量级的EJB中解放出来,经过无数实践大家基本上已经确定采用部分JAVA EE+Spring是JAVA企业级开发的最佳解决方案。按道理JAVA官方应该摒弃掉JAVA EE中已经被大家抛弃的部分,吸纳Spring重构整个JAVA EE的架构,但是很有意思的一幕出现了,JAVA官方很要面子,死不悔改,坚持在自己的规范里首推EJB承载后端业务逻辑的开发,直至如今也是这样。

但是spring的IOC这个设计实在是太优秀了不服又不行,怎么办?抄!于是JAVA抄Spring也推出了自己的IOC,但是又不能明面上叫IOC,于是改名为DI,这也就是为什么现在谈到IOC这个概念的时候经常会出现IOC/DI(控制反转/依赖注入)这种叫法,其实本质上就是一种东西,只是spring和JAVA EE的实现不同而已。目前spring和JAVA EE呈现出一种相互促进的趋势,彼此都在借鉴(互抄)对方优秀的特性。

相关文章:

  • 知识图谱-KGE-语义匹配-双线性模型(打分函数用到了双线性函数)-2012:LFM(Latent Factor Model)
  • opcj-如何通过一个项目征服Java
  • 【知识图谱】(task1)知识图谱概论
  • PyTorch笔记 - Word Embeddings Word2vec 原理与源码
  • [C++]类和对象【上篇】
  • Docker 安装 Python
  • java 八股文
  • NETCAD GIS快速而简单的搜索引擎
  • Javascript异步编程深入浅出
  • 脉冲波形的产生和整形
  • 2022最后一个月,我们该如何学Java​?
  • Python用一行代码,截取图片
  • C# 11 中的新增功能
  • 【蓝桥杯国赛真题06】python绘制菱形圆环 蓝桥杯青少年组python编程 蓝桥杯国赛真题解析
  • 我为什么选择博客园!
  • 「译」Node.js Streams 基础
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • CentOS 7 修改主机名
  • ES6核心特性
  • If…else
  • Mybatis初体验
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Vue2 SSR 的优化之旅
  • Vue官网教程学习过程中值得记录的一些事情
  • Vue--数据传输
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 基于web的全景—— Pannellum小试
  • 码农张的Bug人生 - 初来乍到
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 实现菜单下拉伸展折叠效果demo
  • 数据可视化之 Sankey 桑基图的实现
  • 数组的操作
  • scrapy中间件源码分析及常用中间件大全
  • 湖北分布式智能数据采集方法有哪些?
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #QT(TCP网络编程-服务端)
  • $$$$GB2312-80区位编码表$$$$
  • (1)bark-ml
  • (C语言)字符分类函数
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (八)Spring源码解析:Spring MVC
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)linux下的时间函数使用
  • (转)ObjectiveC 深浅拷贝学习
  • .NET Core 中插件式开发实现
  • .NET Reactor简单使用教程
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .Net8 Blazor 尝鲜
  • .NET8 动态添加定时任务(CRON Expression, Whatever)