java – 如何在类构造函数运行之前使用EJB 3.1注入Bean?

我有一个具有持久性单元的Facade.我需要Facade并在RoleController Conconstructor运行之前初始化它的依赖项,在EJB 3.1中是否可以这样做?

Spring中,您只需将一些参数(preConstruction =“true”)添加到@configurable即可.

但在EJB中我无法找到一种方法,我总是得到一个NullPointer …

@FacesConverter("rolesConverter")
@Named("roleController")
@SessionScoped
@TransactionManagement(TransactionManagementType.CONTAINER)
public class RoleController implements Serializable,Converter{

    private List<Roles> listofRoles; 
    private List<Roles> listChoosenRoles;
    private DualListModel<Roles> listofDualRoles;
    @EJB
    private RoleFacade roleFacade;

    public RoleController(){
        listofRoles = roleFacade.getlistofRoles();
        listChoosenRoles = new ArrayList();
        listofDualRoles = new DualListModel<Roles>(listofRoles,listChoosenRoles);
    }

解决方法

在构造函数中执行任何逻辑通常是一个坏主意(不仅在EJB运算符上).请改用 @PostConstruct
@postconstruct
public init(){
    listofRoles = roleFacade.getlistofRoles();
    listChoosenRoles = new ArrayList();
    listofDualRoles = new DualListModel<Roles>(listofRoles,listChoosenRoles);
}

使用此批注,容器将首先实例化EJB对象,JVM运行(空)构造函数,通过反射注入依赖关系的容器,当一切准备就绪时,调用所有以未指定的顺序使用@postconstruct注释的方法.现在EJB已准备好为请求提供服务.

我认为一些容器/更新的EJB规范允许构造函数注入,但我从未使用它.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...