当前位置: 首页 > 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编程 蓝桥杯国赛真题解析
  • 我为什么选择博客园!
  • 77. Combinations
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • javascript面向对象之创建对象
  • Java程序员幽默爆笑锦集
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • python 装饰器(一)
  • 理解在java “”i=i++;”所发生的事情
  • 利用DataURL技术在网页上显示图片
  • 前端性能优化——回流与重绘
  • 学习HTTP相关知识笔记
  • 译米田引理
  • 优秀架构师必须掌握的架构思维
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • !$boo在php中什么意思,php前戏
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #1015 : KMP算法
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (力扣题库)跳跃游戏II(c++)
  • (转)IOS中获取各种文件的目录路径的方法
  • *上位机的定义
  • .describe() python_Python-Win32com-Excel
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET BackgroundWorker
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .net通用权限框架B/S (三)--MODEL层(2)
  • @angular/cli项目构建--http(2)
  • @EnableConfigurationProperties注解使用
  • @取消转义
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式