繁体   English   中英

在不同的@Named Beans中注入相同的@SessionScoped Bean

[英]inject the same @SessionScoped Bean in different @Named Beans

我有一个小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?

发生这种情况是因为您在BeanOne init方法中手动初始化了user对象。 依赖注入的目的是让一些容器为您创建对象的实例,因此您不应该手动初始化对象。 因此,只需为此用户设置一个名称,它将在会话期间显示所有其他bean。

@PostConstruct
public void init() { user.setUserName("TestName"); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM