java cdi spring_以Spring方式构建企业Java应用程序——Java EE和Spring框架

我认为可以说Java EE在Java开发人员中声名狼藉。尽管多年来它在所有方面都有所改进,甚至将其官网从Eclipse基金会改为Jakarta EE,但它仍然让人感到很不方便。另一方面,我们拥有Spring Framework(能更好的反应实际问题,一个成熟的Spring平台),这是一个出色的,轻量级的,快速的,创新的,高效的Java EE替代品。那么为什么还要用Java EE呢?

8d3f2d1dc0e198886b3c4eeffad7c8bf.png

我们将通过展示使用大多数Java EE规范构建现代Java应用程序是多么容易来回答这个问题。而且,成功的关键因素是Eclipse Microprofile:微服务时代的企业Java。

我们要构建的应用程序是用于管理人员的RESTful Web API。在Java中构建RESTful Web服务的标准方法是使用JAX-RS 2.1(JSR-370)。因此,CDI 2.0(JSR-365)是负责依赖注入,而JPA 2.0(JSR-317)将覆盖数据访问层。当然,Bean Validation 2.0(JSR-380)用来帮助我们处理输入验证。

34c99773eeee7bc69c7b41a389d89d3b.png

我们将依赖的唯一非Java EE规范是OpenAPI v3.0,它有助于提供RESTful Web API的可用描述。有了这个,让我们开始使用thePersonEntity域模型(省略getter和setter):

a59f9aef27193cf6cc9f23e80754fd7d.png

它只有绝对最小的属性集。 JPA存储库非常简单,并实现了一组典型的CRUD方法。

355095418ed41c926d94579b3551f2a1.png

事务管理(即@Transactionalannotation)需要解释一下。 在典型的Java EE应用程序中,容器负责运行时管理事务。 由于我们不希望登录应用程序容器,我们可以使用EntityManager来启动/提交/回滚事务。这样肯定可以,但同时它也会污染代码。 可以说,更好的选择是使用Apache DeltaSpikeCDI扩展进行声明式事务管理(这是@Transactional和@EntityManagerConfig注释的来源)。 下面的代码段说明了它是如何集成的。

49b26b259f3ed1ded162772d6accc86b.png

接下来将出现ThePerson数据传输对象和服务层。

387f8ef46a365f617c208f99fb6cfe83.png

老实说,为了保持示例应用程序尽可能小,我们可以完全跳过服务层并直接转到存储库。 但总的来说,这不是一个很好的做法,所以让我们介绍一下PeopleServiceImpl。

29d55a1867ba91658d7cb2cc647361e5.png

剩下的唯一部分是JAX-RS应用程序和资源的定义。

cb76e9be23aba43c366ddd86b1fdfd24.png

JAX-RS资源实现虽然有点有趣,但是我们让它尽可能简单点。

0099c3f042e8d102ae437b101e6504e0.png

f4bacef9994de4b003205a11fad44574.png

029be825857e4a90afb19e486227ac94.png

有了这个,我们就完成了! 但是,我们怎样才能将所有这些部件组装在一起? 这时我们引入Microprofile。 有许多实现可供选择,这里使用的是Project Hammock。 我们唯一要做的就是指定我们想要使用的CDI 2.0,JAX-RS 2.1和JPA 2.0实现,分别转换为Weld,Apache CXF和OpenJPA(通过Project Hammock依赖项表示)。 我们来看看Apache Maven pom.xml文件。

724feba50ec17703e1e91af58cc12afb.png

让我们立即构建并运行应用程序。

确保我们的人员管理RESTful Web API完全正常运行的最佳方法是向其发送一些请求:

fa19157c3a88f1922a2668e66288ce57.png

如何确保Bean验证工作正常? 要触发它,让我们发送部分准备好的请求。

到目前为止,我们还没有谈到测试我们的应用程序。 提出集成测试有多难,比方说,添加一个人的场景? 事实证明,围绕测试Java EE应用程序的框架已经有了很大的改进。 特别是,使用Arquillian测试框架(以及心爱的JUnit和REST Assured)非常容易实现。示例如下,

63e8565c2eb561d280ba37a75f7e75f2.png

完成了! 实际上,开发现代Java EE应用程序真的很有趣! 事实上,与Spring的相似之处并非巧合,因为它将继续激发Java EE生态系统的创新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值