gpt4 book ai didi

java - CDI 为 bean 选择正确的范围

转载 作者:行者123 更新时间:2023-11-30 11:39:58 25 4
gpt4 key购买 nike

来自 Spring 的普通旧 DI,我无法弄清楚在使用 CDI 编写时如何正确选择范围。

在 Spring 中,我的所有服务默认都具有单例范围,我想它映射到 CDI(甚至@Singleton)中的应用程序范围。我知道例如登录的用户信息我需要使用 session 范围,例如表单参数我需要请求范围。

假设我有一个隐藏外部服务 API 调用的 bean。它是完全无状态的。我应该把它写成 @Singleton 还是只是应用程序范围的?或者让它根据每个请求创建(可能是错误的选择)。

到处注入(inject)一切是否正确?在 Spring 中,我通过 new 创建我的数据对象。我应该在 CDI 中做同样的事情还是简单地 @Inject 它们?

最佳答案

您只使用 CDI 吗?还是 Java EE 6 容器?如果你有一个用于服务调用的无状态类,那么我建议使用来自 EJB 规范的@Stateless(所以你需要一个 Java EE 6 容器)它不是单例,但它不是也可以根据每个请求创建。我相信它更紧密地绑定(bind)到 session ,但由于它是无状态的,因此可以汇集和共享实例。如果您只处理 CDI,我相信 Singleton 更直接地匹配 Spring 的单例,但我建议使用 ApplicationScoped,因为它提供了一个代理,可以更轻松地序列化使用它的 bean。

关于java - CDI 为 bean 选择正确的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12964606/

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