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 之间的关系,到底该如何理解?https://www.zhihu.com/question/272497911/answer/3626367890
原文地址:https://blog.csdn.net/qq_46135702/article/details/145188792
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!