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

相关推荐
GJCTYU2 分钟前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
艾迪的技术之路12 分钟前
redisson使用lock导致死锁问题
java·后端·面试
今天背单词了吗98030 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师33 分钟前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
东阳马生架构1 小时前
订单初版—2.生单链路中的技术问题说明文档
java
咖啡啡不加糖1 小时前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南1 小时前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
DKPT1 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Percep_gan1 小时前
idea的使用小技巧,个人向
java·ide·intellij-idea