quarkus 与@NoScope 像@Stateless?

quarkus with @NoScope like @Stateless?

@Stateless EJB 的 quarkus 对应物是什么?

实际上,我只能在典型的 cdi bean 中使用 cdi,但是没有像 quarkus 中的 @Stateless 那样没有作用域的 bean,或者?

@NoScope // such scope does actually not exit in cdi or quarkus
public class MyBean{

    @Inject 
    EntityManager em;

}

CDI @RequestScoped表示每个请求的新实例。它不会在请求之间保持状态,因此您可以将其视为 @Stateless.

的替代品

@Stateless vs @RequestScoped

当我们在使用@Stateless 的上下文中使用@RequestScope 时,我们仅通过在每个请求上销毁和创建bean 来模拟@Stateless 行为。好处是我们强制执行请求之间的隔离;但是,权衡是我们在每次请求时都执行昂贵的 bean 创建/销毁。

如果我们关心性能并且只需要无状态行为而不强制执行请求之间的隔离,我们应该将 bean 设计为无状态并使用 @Dependent 或 @ApplicationScoped 范围。如果开发人员小心并无状态地编写代码,就不会有请求之间没有隔离的风险。

将@RequestScope 用作@Stateless 听起来像是针对框架中缺失功能的臭味解决方法;因此,除非必要,否则我不想在这种情况下使用它。

EJB 带有线程池、监控或事务管理(当容器管理时)等附加功能,...

所以在 Quarkus 中没有直接替代@Stateless,但是你可以通过结合使用 @Transactional@RequestScoped.

来接近

我不知道@NoScope,但我猜你的意思是 @Dependent

查看 Adam Bien 的博客:https://www.adam-bien.com/roller/abien/entry/migration_from_stateless_bce_to