gpt4 book ai didi

java - JAX-RS:Stateless、Singleton、RequestScoped 混淆

转载 作者:行者123 更新时间:2023-11-29 04:12:06 25 4
gpt4 key购买 nike

我见过很多次 JAXRS 资源的配置方式。

我的意思是,有时我看到它们被注释为 @Singleton@Stateless@ApplicationScoped@RequestScoped,甚至没有任何注释或同时使用它们。

  • javax.enterprise.context.RequestScoped
  • javax.enterprise.context.ApplicationScoped
  • javax.ejb.Stateless
  • javax.ejb.Singleton
  • javax.inject.Singleton

我应该使用哪个注解?

javax.ejb 与 JAXRS 资源有什么关系?

另一方面,我也想知道如何准确地使用 @Context 注释。

我的意思是,我已经看到这个应用于参数,也在类字段中

@Path("entity")
public class EntityResource {

@Context
private Request request;

@POST
public Response create(Entity entity) {
this.request...
}

}

或者,

@Path("entity")
public class EntityResource {

@POST
public Response create(Entity entity, @Context Request request) {
request...
}

}

我将如何进行?

最佳答案

无需在 JAX-RS 资源类中使用任何 EJB 或 CDI 注释 - 除非您想在同一类中使用 EJB 或 CDI 功能。

如果要在资源类中注入(inject)任何CDI bean,那么资源类本身必须是一个CDI bean,所以要加scope注解,最好是@javax.enterprise.context.RequestScoped.

如果您使用像 @Stateless 这样的 EJB 注释,注入(inject)也将起作用,因为 EJB 也是 CDI bean(但反之则不然)。但是,无状态 bean 具有不同的生命周期,默认情况下它是事务性的。

另一方面,如果你需要事务,你也可以结合使用@javax.transaction.Transctional@RequestScoped@Path.

背景:

EJB 对于大多数用途来说有点过时了。它们出现在 JAX-RS 和 CDI 之前,但如今,CDI 被视为 Java EE/Jakarta EE 中的统一依赖注入(inject)机制,并且正在更新旧规范以与 CDI 更紧密地集成。

关于java - JAX-RS:Stateless、Singleton、RequestScoped 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54531212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com