• 【方向盘】Java EE几十种技术,“活着的”还剩几何(企业应用技术篇)


    本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏

    你好,这里是Java方向盘,我是方向盘(YourBatman),坐稳扶好,开始发车。

    TitleLink
    所属专栏【方向盘】-Java EE
    源代码https://github.com/yourbatman/FXP-java-ee
    程序员专用网盘公益上线啦,注册送1G超小容量,帮你实践做减法https://wangpan.yourbatman.cn
    Java开发软件包(Mac)https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit
    女娲工程http://152.136.106.14:8761
    版本约定[Mac OS 12.5],[IntelliJ IDEA 2022.2],[Java EE:6、7、8],[Jakarta EE:8、9、9.1]

    📚前言

    若你还不太清楚Java EE是什么,可先移步这里:什么是Java EE?

    上篇文章已经聊过了Java EE最重要的部分:Web应用技术,发现情况“惨不忍睹”,8项技术仅剩Servlet依旧保持主流,其它的均已淘汰或濒临淘汰。“此景”详情可移步阅读:上篇文章

    本文继续,继续领略Java EE的企业应用技术,它曾在企业级开发中叱咤风云,来看看它现在的生存现状。为了便于理解,还是贴上这张分类图:
    在这里插入图片描述

    ✍正文

    在这里插入图片描述

    Part2: 企业应用技术

    Enterprise Application Technologies,共13种规范。
    在这里插入图片描述

    ✌1. Bean Validation

    推荐学习指数 ⭐️⭐️⭐️⭐️⭐️

    在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null,email必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太低,在时间、成本、质量的博弈中必然会落后。正所谓专业的事情交给专业的组件去做,我们可把校验层抽象出来,这就是Bean Validation。

    Bean Validation简直就是业务开发中祛掉坏味道代码的利器,完美的实现契约式编程,大大提高开发效率,降低出错概率。
    在这里插入图片描述

    API的GAV

    <dependency>
        <groupId>jakarta.validationgroupId>
        <artifactId>jakarta.validation-apiartifactId>
        <version>2.0.2version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • Validation、ConstraintViolation
    • @Valid、@GroupSequence、@ConvertGroup
    • @Notnull、@Min、@NotEmpty

    Bean Validation的实现有Apache的 Bval和Hibernate Validator,前者可忽略,后者几乎成为唯一实现。

    ✌2. EJB

    推荐学习指数 ⭐️⭐️

    Enterprise JavaBeans它就是鼎鼎大名的EJB,也叫企业级JavaBean。EJB技术的诞生标志着Java Beans的运行正式从客户端领域扩展到服务器领域

    用于基于组件的事务性分布式编程。EJB不仅指定了bean格式,而且定义了运行bean的容器必须提供的一组服务。因此,开发人员无需担心服务细节,例如安全性,事务支持或任何远程对象访问。如此以至,想运行EJB必须有EJB容器,如JBoss,WebLogic,WebSphere等…就问你重不重?
    在这里插入图片描述

    API的GAV

    <dependency>
        <groupId>jakarta.ejbgroupId>
        <artifactId>jakarta.ejb-apiartifactId>
        <version>3.2.6version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • EJBContext
    • @EJB、@DependsOn、@Singleton、@SessionBean、@Stateless

    由EJB容器提供实现。

    ✌3. DI

    推荐学习指数 ⭐️⭐️⭐️

    Dependency Injection该规范比较简单,约定了一些标准注解:

    • @Inject
    • @Named
    • @Qualifier
    • @Scope
    • @Singleton

    API的GAV

    <dependency>
        <groupId>jakarta.injectgroupId>
        <artifactId>jakarta.inject-apiartifactId>
        <version>1.0.3version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API:如上

    CDI容器、Spring IoC容器、Guice容器等均有提供实现。

    ✌4. CDI

    推荐学习指数 ⭐️⭐️⭐️

    Contextual Dependency Injection上下文依赖注入。其实它包含两个概念:

    1. Context:上下文。可以绑定生命周期,可以与有状态的组件交互
    2. DI:依赖注入。以类型安全的方式注入一个组件到应用中去,包括指定特定实现注入

    Spring的容器我们熟悉,CDI就是Java EE的容器。

    API的GAV

    <dependency>
        <groupId>jakarta.enterprisegroupId>
        <artifactId>jakarta.enterprise.cdi-apiartifactId>
        <version>2.0.2version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • CDI、CDIProvider、Bean、InjectionPoint
    • @Model、@Stereotype、@Produces

    ✌5. JPA

    推荐学习指数 ⭐️⭐️⭐️⭐️

    Java Persistence API:Java持久层API。描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
    在这里插入图片描述
    API的GAV

    <dependency>
        <groupId>jakarta.persistencegroupId>
        <artifactId>jakarta.persistence-apiartifactId>
        <version>2.2.3version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • EntityManager
    • @Entity、@Column、@Cacheable
    • @ManyToMany、@ManyToOne、@NamedQuery

    其实JPA的实现除了Hibernate,还有Eclipsellink,OpenJPA或Batoo。

    ✌6. JMS

    推荐学习指数 ⭐️⭐️⭐️

    Java Message Service:Java消息服务。两个应用程序之间需要进行通信,我们使用一个JMS服务,进行中间的转发,通过JMS 的使用,我们可以解除两个程序之间的耦合。也是我们常说的MQ。

    JMS有一个类似协议AMQP,请注意区分

    在这里插入图片描述
    API的GAV

    <dependency>
        <groupId>jakarta.jmsgroupId>
        <artifactId>jakarta.jms-apiartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    代表API

    • JMSContext、JMSProducer、JMSConsumer
    • Message、TextMessage、MapMessage
    • MessageListener

    ActiveMQ是对JMS的典型实现。

    ✌7. JavaMail

    推荐学习指数 ⭐️⭐️⭐️

    JavaMail:Java邮件。顾名思义,帮助我们发送Email电子邮件用的。方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如SMTP,POP3,IMAP,还有MIME。

    API的GAV

    <dependency>
        <groupId>jakarta.mailgroupId>
        <artifactId>jakarta.mail-apiartifactId>
        <version>1.6.7version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • Address、BodyPart、Header
    • Transport、Multipart

    并不是发邮件不重要,而是实际使用中我们大概率不需要关心其底层API,而使用更高层级的封装工具。

    ✌8. JTA

    推荐学习指数 ⭐️⭐️⭐️

    Java Transaction API (JTA):用于描述Java EE框架中事务管理器与应用程序,资源管理器,以及应用服务器之间的事务通讯。简而言之:分布式事务规范。XA是分布式协议规范,而JAT是Java中对XA协议的实现。

    API的GAV

    <dependency>
        <groupId>jakarta.transactiongroupId>
        <artifactId>jakarta.transaction-apiartifactId>
        <version>1.3.3version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • Transaction、TransactionManager、TransactionSynchronizationRegistry
    • @Transactional、@TransactionScoped

    ✌9. Common Annotation

    推荐学习指数 ⭐️⭐️⭐️⭐️

    Common Annotations for the Java Platform:Java平台通用注解。这就是我们特别熟悉的JSR 250 通用注解:

    • @Resource / @Resources
    • @PostConstruct
    • @PreDestroy
    • @@Generated:用于标注某段代码是生成的而非人写的,该注解基本不使用

    API的GAV

    <dependency>
        <groupId>jakarta.annotationgroupId>
        <artifactId>jakarta.annotation-apiartifactId>
        <version>1.3.5version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API:同上

    值得注意的是,该jar 没必要导入,因为自JDK 6开始已经被集成到Java SE内部了。

    ✌10. JCA

    推荐学习指数 ⭐️

    Java EE Connector Architecture:Java连接体系架构,是对Java EE标准集的重要补充。因为它注重的是将Java程序连接到非Java程序和软件包中间件的开发。

    JCA的目标:企业应用程序集成方面,它提供的标准化体系结构让Java EE组件能够对异构 EIS进行“即插即用”的访问,其中包括ERP、事务处理、老式数据库系统等。

    API的GAV

    无单独Jar,是一种架构说明
    
    • 1

    代表API:无

    ✌11. Batch

    推荐学习指数 ⭐️

    Batch Applications for the Java Platform:Java平台的批处理规范。从它出生起就被认为是抄袭Spring Batch项目的,所以没啥好聊的~

    API的GAV

    <dependency>
        <groupId>jakarta.batchgroupId>
        <artifactId>jakarta.batch-apiartifactId>
        <version>1.0.2version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • Batchlet
    • PartitionMapper、PartitionCollector
    • JobOperator、BatchRuntimeException

    ✌12. Concurrent

    推荐学习指数 ⭐️

    Concurrency Utilities for Java EE:Java企业平台并发工具。额…希望是和企业平台整合,所以定义了一堆借口。结果是:一句话,没啥用,JUC足矣。

    API的GAV

    <dependency>
        <groupId>jakarta.enterprise.concurrentgroupId>
        <artifactId>jakarta.enterprise.concurrent-apiartifactId>
        <version>1.1.2version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • ContextService
    • ManagedTask
    • Trigger

    ✌13. Interceptors

    推荐学习指数 ⭐️

    它是Java EE的拦截器,和EJB一起使用。如@AroundInvoke、@Intercerptors

    API的GAV

    <dependency>
        <groupId>jakarta.interceptorgroupId>
        <artifactId>jakarta.interceptor-apiartifactId>
        <version>1.2.5version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代表API

    • InvocationContext
    • @Interceptor、@AroundInvoke、@AroundTimeout、@AroundConstruct

    ✍总结

    企业应用技术是Java EE为企业级开发量身打造的一系列技术合集,曾经叱咤市场数十年,现在回头再看早已风头不再,不禁让人感叹。

    共包含13项具体技术,其中:

    • 1个仍为主流:Bean Validation
    • 2个还比较重要:JPA、Common Annotation
    • 其它的存在感已越来越弱,几近消亡

    Web应用技术 + 企业应用技术覆盖了Java EE体系的核心内容,下文将继续补充剩下的3个part。

    推荐阅读

    在这里插入图片描述

    我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖…是我不可抹灭的黑标签

    • 🎓2013.07 清考、毕业答辩3次未通过、延期毕业
    • 🏷2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作
    • ️️🏷2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作
    • 🏷2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人
    • 🏷2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer
    • 🙅🏻‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委
    • 📚高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》

    在这里插入图片描述

    序号专栏名称简介
    01【方向盘】-程序人生程序人生,人生程序
    02【方向盘】-资讯/新特性IDEA、JDK、Spring技术栈…新特性
    03【方向盘】-IntelliJ IDEA熟练使用IDEA就相当拥有物理外挂,助你高效编码
    04【方向盘】-Bean Validation熟练掌握数据校验,减少90%的垃圾代码
    05【方向盘】-日期时间帮你解决JDK Date、JSR 310日期/其实 的一切问题
    06【方向盘】-Spring类型转换Spring类型转换-框架设计的基石
    07【方向盘】-Spring staticstatic关键字在Spring里的应用
    08【方向盘】-Cors跨域关于跨域请求问题,本专栏足矣
    09【方向盘】-JacksonAlmost Maybe是最好的Jackson专栏
    10【方向盘】-Spring配置类专讲@Configuration配置类,你懂的
    11【方向盘】-Spring技术栈暂无所属小分类的,Spring技术栈大分类
    12【方向盘】-JDK暂无所属小分类的,JDK技术栈大分类
    13【方向盘】-ServletServlet规范、Web相关内容专题
    14【方向盘】-Java EE从Java EE到Jakarta EE,30年弹指一挥间
    15【方向盘】-工具/提效开发工具、软件工具,目标是提效
    16【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术
    17【方向盘】-基本功 每个Javaer,都需要有扎实的基本功
    99源代码库大多数专栏均配有源代码,都在这里
  • 相关阅读:
    天天都在说的用户画像到底该如何构建?看这篇就够了!
    【云原生 | 28】Docker运行分布式任务处理平台Celery
    二叉搜索树的实现
    Vulnhub系列靶机---XXE Lab: 1
    硬核!让初学者快速掌握经典算法的宝典——数据结构与算法经典问题解析
    [附源码]java毕业设计龙虎时代健身房管理系统
    网络安全(黑客)自学
    网络IP地址子网划分学习
    使用JacORB编译idl文件生成依赖的开发jar---Corba北向接口开发001
    Vue自定义指令=>局部指令定义及全局指令定义
  • 原文地址:https://blog.csdn.net/f641385712/article/details/119850130