0

我有这个要求:我有一个单例 bean,我有一个用 @PostConstruct 注释的方法,我在其中执行一些初始化。其中一个初始化是从数据库中读取一些值,所以我想在这个方法中注入一个无状态 bean,它是一个访问数据库的服务 bean。我不想将无状态 bean 作为一个字段注入到单例 bean 中,因为它仅在此方法中需要(在单例 bean 中没有其他地方)。为此,我确实在单例 bean 中写了这个:

@Singleton
public class MySingletonBean {

    @PostConstruct
    @EJB
    public void init(SLSBService service) { /* use service to read from DB */ };
    ...
}

问题是无法实例化 Singleton bean。任何的想法?先感谢您。

4

1 回答 1

1

由于 @PostConstruct 注释(回调)方法实际上是在所有引用都被解析(所有 bean 注入)之后调用的,我认为这个构造不起作用。

您可以做或尝试的是删除 @PostConstruct 并使用正常的 setter 注入。但是,请注意,此时其他注入的资源不一定已解决。

@EJB
public void setService(SLSBService service){
     service.doSmg();
}

@Stateless    
public class SLSBService{
    @PersistenceContext
    private EntityManager em;

    @TransactionAttribute(TransactionAttributeType.MANDATORY)
    public void doSmg() {
        Member member = new Member();
        member.setEmail("bla@bla.de");
        member.setName("fubu");
        member.setPhoneNumber("453454534535");
        em.persist(member);
    }
}

/* 编辑 */

只是有时间尝试一下。该构造应该可用于 DAO,因为该方法在事务中执行,并且 EntityManager(在 SLBService 中)也被正确注入。正如预期的那样,对其他 EJB 的引用尚未解决,因此请注意这一点。

于 2012-01-27T13:11:12.250 回答