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

标签 java dependency-injection ejb ejb-3.0 ejb-3.1

我有一个具有持久性单元的外观。我需要在 RoleController Constructor 运行之前初始化 Facade 和它的依赖项,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 playground 上)。使用 @PostConstruct相反:

@PostConstruct
public init(){
    listOfRoles = roleFacade.getListOfRoles();
    listChoosenRoles = new ArrayList();
    listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles);
}

有了这个注释,容器将首先实例化一个 EJB 对象,JVM 运行一个(空的)构造函数,容器通过反射注入(inject)依赖项,当一切准备就绪时,以未指定的顺序调用所有用 @PostConstruct 注释的方法.现在 EJB 已准备好处理请求。

我认为一些容器/较新的 EJB 规范允许构造函数注入(inject),但我从未使用过。

关于java - 如何在类构造函数运行之前使用 EJB 3.1 注入(inject) Bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7692219/

相关文章:

java - @RestControllerAdvice 在 Spring Boot 响应式 Java 应用程序中不起作用

java.lang.IllegalArgumentException : error Type referred to is not an annotation type 异常

java - Jasper 报告 : Document root element "jasperReport", 必须与 DOCTYPE 根 "null"匹配

java - 如何在云上使用tomcat 8运行java应用程序(war文件)? & 在哪里?

java - Spring 依赖注入(inject)到带有构造函数的类

java - 从 EJB 读取文件

java - JBoss RMI 事务

c# - 对用户控件的依赖注入(inject)

c# - Asp.Net Core RC1 -> RTM DI 更改 - 从服务中删除

java - 异常创建无状态 session bean