我已经多次看到 JAXRS 资源的几种配置方式。
我的意思是,有时我看到它们被注释为@Singleton, @Stateless, @ApplicationScoped, @RequestScoped, 甚至没有任何注释或同时使用它们。
javax.enterprise.context.RequestScopedjavax.enterprise.context.ApplicationScopedjavax.ejb.Statelessjavax.ejb.Singletonjavax.inject.Singleton我应该使用哪个注释?
有什么javax.ejb用JAXRS资源呢?
另一方面,我也想知道如何准确地使用@Context注释。
我的意思是,我已经看到这应用于参数,也在类字段中。
@Path("entity")
public class EntityResource {
@Context
private Request request;
@POST
public Response create(Entity entity) {
this.request...
}
}
Run Code Online (Sandbox Code Playgroud)
或者,
@Path("entity")
public class EntityResource {
@POST
public Response create(Entity entity, @Context Request request) {
request...
}
}
Run Code Online (Sandbox Code Playgroud)
我将如何进行?
不需要在 JAX-RS 资源类中使用任何 EJB 或 CDI 注释——除非您想在同一个类中使用 EJB 或 CDI 特性。
如果要将任何 CDI bean 注入资源类,那么资源类本身必须是 CDI bean,因此应该添加范围注解,最好是@javax.enterprise.context.RequestScoped.
如果您使用像 一样的 EJB 注释@Stateless,注入也将起作用,因为 EJB 也是 CDI bean(但不是相反)。但是,无状态 bean 具有不同的生命周期,并且默认情况下是事务性的。
另一方面,如果需要事务,也可以@javax.transaction.Transctional与@RequestScoped和结合使用@Path。
背景:
对于大多数用途,EJB 有点过时了。它们首先出现,在 JAX-RS 和 CDI 之前,但如今,CDI 被视为 Java EE/Jakarta EE 中统一的依赖注入机制,并且正在更新旧规范以与 CDI 更紧密地集成。
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |