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

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 示例:

@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 示例:

@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 之间的关系,到底该如何理解?icon-default.png?t=O83Ahttps://www.zhihu.com/question/272497911/answer/3626367890


http://www.kler.cn/a/506970.html

相关文章:

  • 怎么在iPhone手机上使用便签进行记录?
  • SQL Prompt 插件
  • 计算机的错误计算(二百一十一)
  • 基于ESP8266 wifimanager实现WiFi配置及天气显示
  • Vue3组件设计模式:高可复用性组件开发实战
  • 极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案
  • DP读书:江苏省政府境外奖学金申请指南——A2悉尼大学现代工业设计【2024学习指南、笔记总结】+ 苏教国际 + 悉尼大学短期交流攻略 Blog 版
  • 小程序组件 —— 31 事件系统 - 事件绑定和事件对象
  • 《零基础Go语言算法实战》【题目 2-30】并发安全问题
  • 项目太大导致 git clone 失败
  • 前端小知识 鼠标穿透 pointer-events: none;
  • Vue快速开发之环境搭建nodejs与运行第一个Vue项目
  • docker的数据卷与dockerfile自定义镜像
  • Golang—— error 和 panic
  • [私用学习笔记·突击面试]Collection和迭代器
  • 图论的起点——七桥问题
  • 软件测试入门—测试流程之需求分析
  • Pycharm报错:DeprecationWarning: sipPyTypeDict() is deprecated
  • react 与 vue 的比较,以及如何选择?
  • 使用 spring boot 2.5.6 版本时缺少 jvm 配置项
  • 持续集成 02|Jenkins介绍与安装、Postman集成Jenkins、代码集成Jenkins
  • 【网络协议】DHCP(动态主机配置协议)
  • 单片机的原理及其应用:从入门到进阶的全方位指南
  • iis强制重定向https
  • 出差人员携带的电脑文件信息安全如何保障?
  • 校园跑腿小程序---任务界面 发布以及后端模板下载