gpt4 book ai didi

java - @Inject 在 session 中创建一个新的bean实例

转载 作者:行者123 更新时间:2023-12-01 13:09:13 24 4
gpt4 key购买 nike

类似于 @Inject is injecting a new instance every time i use it ,但我在该线程中找不到答案。

我对 CDI 和 JSF 都很陌生,我正在尝试使用 CDI 而不是 JSF 注释。我想从 MemberController 检索凭据。 bean 本身(两者)是从 jsf 页面调用的。问题是 MemberController 中的 Credential 实例始终具有空名称/密码,即使我确认 Credential 中的 setter 已命中。我不明白为什么有两个 Credential 实例。我可以通过@ManagedBean+@ManagedProperty得到我想要的。但我想知道如何使用 CDI 做同样的事情。

我的环境是JBoss 7.1.1+Java EE 6

凭证.Java

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import java.io.Serializable;

@Named
@SessionScoped
public class Credential implements Serializable{
private static final long serialVersionUID = 680524601336349146L;

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

private String password;
}

MemberController.Java

@Named
@SessionScoped
public class MemberController implements Serializable {
private static final long serialVersionUID = 8993796595348082763L;

@Inject
private Credential newCredential;

public void login() {
String msg = newCredential.getName()+":"+newCredential.getPassword();
}
}

JSF 页面段

<p:inputText id="username" label="Username" value="#{credential.name}" />
<p:password id="password" label="Password" value="#{credential.password}" />
<p:commandButton value="Login" action="members" actionListener="#{memberController.login}" />

最佳答案

注入(inject)不会调用新实例(第一次调用时,或者注入(inject)的 bean 具有 requestscope)。这取决于您的 bean 使用的范围。您使用的 Scope 将为每个使用您的应用程序的人生成一个新的 bean(他们自己的 sessionscope bean)。该范围内的数据仅对该人可见。如果您希望应用程序有一个可供应用程序的所有用户访问的全局容器,并且为每个人包含相同的数据,那么您应该创建一个 applicationscope 或 singleton bean。通过此注释,您可以创建一个在应用程序的生命周期中每个人都可以访问的容器,作为保存数据的中心点。

关于java - @Inject 在 session 中创建一个新的bean实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23026630/

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