JAVA EE与Spring的关系

最近在阅读一些从岁数很大却依然活跃在开源世界的项目,发现其开放接口采用JAVA EE(Jakarta EE)提供的标准用于构建 REST API,例如 @Path, @QueryParam, @PathParam, @GET, @Suspended 等。

而目前主流开发中利用Spring框架已是家常便饭,利用@RestController, @RequestMapping, @GetMapping, @RequestParam等注解便快速且简洁地构建REST API。

注意:

1、两者依赖注入的方式不同

  • Spring 中,你通常使用 @Autowired 或者构造函数注入(例如 @RequiredArgsConstructor,这是 Lombok 提供的注解)来实现依赖注入。
  • Jakarta EE 中,使用的是 @Inject 注解,类似于 Spring 的 @Autowired,但是它依赖的是 CDI (Contexts and Dependency Injection) 容器。比如,@Inject private RetrieveService service; 表示 CDI 容器会自动注入 RetrieveService 实例。

2、请求处理的方式区别

  • Spring 通过 @RestController 注解标记类,表示这个类是一个处理 REST 请求的控制器,并且 @GetMapping 等注解用于标记具体的 HTTP 方法。
  • Jakarta EE 中,使用的是 @Path 注解来定义 RESTful 路径,@GET 注解来标识一个 GET 请求处理方法。并且它支持一些高级特性,比如异步响应 @Suspended AsyncResponse ar

3、REST API 路由定义

  • Spring 中,通常使用 @RequestMapping 或者 @GetMapping 等注解来定义路由路径,并且通过 @RequestParam 来获取查询参数。
  • Jakarta EE 中,路由路径通过 @Path 注解定义,同时参数通过 @QueryParam, @PathParam 等注解来获取。它更接近 JAX-RS 标准。

4、异步处理

  • Jakarta EE 中,异步处理通常通过 @Suspended AsyncResponse 来实现,这使得服务器在处理请求时可以不阻塞,适用于高并发场景。
  • Spring 也有类似的异步处理机制,但它更常用的是 @Async 注解或者通过 DeferredResult 来实现。

代码示例

1、Spring 示例:

java 复制代码
@RestController
@RequestMapping("/test")
public class MinicvTestController {

    private final IMinicvTestService minicvTestService;

    @GetMapping("/list")
    public TableDataInfo<MinicvTestVo> list(MinicvTestBo bo, PageQuery pageQuery) {
        return minicvTestService.queryPageList(bo, pageQuery);
    }
}

2、Jakarta EE 示例:

java 复制代码
@RequestScoped
@Path("test/{xxx}/test")
public class TestURI {
    
    @Inject
    private RetrieveService service;
    
    @Context
    private HttpServletRequest request;
    
    @PathParam("value")
    private String value;
    
    @QueryParam("contentType")
    private String contentType;
    
    @GET
    public void get(@Suspended AsyncResponse ar) {
        // 处理请求逻辑
    }
}

Java EE 与 Spring 之间的关系,到底该如何理解?https://www.zhihu.com/question/272497911/answer/3626367890

相关推荐
计算机学姐9 分钟前
基于SpringBoot的小区停车位管理系统
java·vue.js·spring boot·后端·mysql·spring·maven
说淑人17 分钟前
Spring Cloud & 以Gateway实现限流(自定义返回内容)
java·spring cloud·gateway·限流
柴薪之王、睥睨众生18 分钟前
(自用)Java学习-5.12(Redis,B2C电商)
java·开发语言·学习
小鸡脚来咯23 分钟前
请求参数:Header 参数,Body 参数,Path 参数,Query 参数分别是什么意思,什么样的,分别通过哪个注解获取其中的信息
java·spring boot·后端
一只鹿鹿鹿24 分钟前
智慧能源大数据平台建设方案(PPT)
java·大数据·数据库·能源
刃神太酷啦1 小时前
类和对象(1)--《Hello C++ Wrold!》(3)--(C/C++)
java·c语言·c++·git·算法·leetcode·github
阿乾之铭1 小时前
Java后端文件类型检测(防伪造)
java·开发语言
console.log('只想发财')1 小时前
新手安装java所有工具(jdk、idea,Maven,数据库)
java·maven·intellij-idea
添砖Java中1 小时前
深入剖析缓存与数据库一致性:Java技术视角下的解决方案与实践
java·数据库·spring boot·spring·缓存·双写一致性
m0_726965982 小时前
在IDEA中导入gitee项目
java·gitee·intellij-idea