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 小时前
Tomcat详解
java·tomcat
S***267513 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)13 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL13 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
V***u45314 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿14 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t91914 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***082914 小时前
【监控】spring actuator源码速读
java·spring boot·spring
麦麦鸡腿堡14 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
vx_dmxq21115 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php