gpt4 book ai didi

java - 当 @ApplicationScoped 注入(inject)到另一个类中时,@ApplicationScoped bean 中具有不同作用域的依赖项是否会再次重新注入(inject)?

转载 作者:行者123 更新时间:2023-12-02 02:44:47 25 4
gpt4 key购买 nike

我有三个具有不同范围的类:

// default scope
public class DefaultScopedInstance {
private String someAttribute;
}

@SessionScoped
public class SomeSessionScopedInstance implements Serializable {
private String username;
private String email;
}

@ApplicationScoped
public class UniqueInstance {

private Clazz someUniqueData; //just an example. could be anything

@Inject
private SomeSessionScopedInstance sessionData;

@Inject
private DefaultScopedInstance someOtherData;
}

然后将 UniqueInstance 注入(inject) JAX-RS Controller (RequestScoped),如下所示:

@Path("/someService")
public class SomeRestSevice {
@Inject
private UniqueInstance uniqueInstance;
}

对于每个新请求,UniqueInstance 的依赖项是否会再次重新注入(inject),以尊重其范围?

这可能与此设计同时存在问题吗?就像其他用户访问 SomeSessionScopedInstance 的某些请求一样?

此外,由于某种原因这可能会出现性能问题?

谢谢!

最佳答案

Are the dependencies of UniqueInstance will be reinjected again for every new request in order to respect their scopes?

在谈论 session bean 时是,对于默认/依赖为否。我们先来谈谈@Inject private SomeSessionScopedInstance sessionData;。这个将始终包含用户拥有 session 的当前 session 的数据,如果您尝试在没有 session 的服务器端使用它,它将崩溃。如何完成此操作的详细信息取决于实现,但对于 Weld(您可能使用的)来说,这是基于线程局部变量的。它将提取绑定(bind)到当前执行代码的线程的 session (这是现实的 ofc 简化版本)。

至于@Inject private DefaultScopedInstance someOtherData; - 这个不会被“重新注入(inject)”。它是@Dependent,意味着它的生命周期与其注入(inject)的对象相同,即@ApplicationScoped bean。因此,只要 AppScoped bean 存在,它就会是同一个实例。

This could have a concurrent problem with this design? Like some request accessing the SomeSessionScopedInstance from other users?

不,根据我上面的描述。您只有一个 session 绑定(bind)到线程,仅此而已。

Also, this could have a performance issue for some reason?

问题太模糊了。如果你编码得不好,无论其背后的设计如何,任何东西都可能出现性能问题。

关于java - 当 @ApplicationScoped 注入(inject)到另一个类中时,@ApplicationScoped bean 中具有不同作用域的依赖项是否会再次重新注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44792462/

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