Cri*_*tes 6 java dependency-injection ejb ejb-3.0 ejb-3.1
我有一个具有持久性单元的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);
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*icz 11
在构造函数中执行任何逻辑通常是一个坏主意(不仅在EJB操作员上).@PostConstruct改为使用:
@PostConstruct
public init(){
listOfRoles = roleFacade.getListOfRoles();
listChoosenRoles = new ArrayList();
listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles);
}
Run Code Online (Sandbox Code Playgroud)
使用此批注,容器将首先实例化EJB对象,JVM运行(空)构造函数,通过反射注入依赖项的容器,当一切准备就绪时,调用所有@PostConstruct以未指定顺序注释的方法.现在EJB已准备好为请求提供服务.
我认为一些容器/更新的EJB规范允许构造函数注入,但我从未使用它.