我有一个具有持久性单元的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规范允许构造函数注入,但我从未使用它.
原文地址:https://www.jb51.cc/java/120787.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。