我有一个小的javaee webproject,我需要在其中注入bean。我有一个启用了cdi的tomee服务器。这是一个小测试案例。
这是我的@SessionScoped用户对象
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
@SessionScoped
public class User implements Serializable {
String userName;
public User () {}
public User (String userName) { this.userName = userName; }
public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName = userName; }
}
这是我的两个几乎相同的豆子:
@Named
@RequestScoped
public class BeanOne {
private String message;
@Inject User user;
@PostConstruct
public void init() { user = new User("TestName"); }
public String getMessage() { return user.getUserName(); }
}
在这个bean中我创建了一个新用户。方法getMessage返回正确的用户名。我认为用户应该仍然存在于第二个bean中,因为它的@SessionScoped。这是我的第二个豆。
@Named
@RequestScoped
public class BeanTwo {
private String message;
@Inject User user;
public String getMessage() { return user.getUserName(); }
}
但是在这个bean中,user.getUserName()返回null。我该如何注入一个@SessionScoped bean?
答案 0 :(得分:2)
这是因为您在user
init方法中手动初始化了BeanOne
对象。依赖注入的目的是让一些容器为您创建对象的实例,因此您不应该手动初始化对象。因此,只需为此用户设置一个名称,它将在会话期间显示所有其他bean。
@PostConstruct
public void init() { user.setUserName("TestName"); }