我有这个要求:我有一个单例bean,我有一个用@PostConstruct注释的方法,我在那里执行一些初始化。其中一个初始化是从DB读取一些值,所以我想在这个方法中注入一个无状态bean,它是一个访问DB的服务bean。我不想将无状态bean作为单元bean中的字段注入,因为仅在此方法中需要它(在单例bean中没有其他地方)。为此,我在singleton bean中写了这个:
@Singleton
public class MySingletonBean {
@PostConstruct
@EJB
public void init(SLSBService service) { /* use service to read from DB */ };
...
}
问题是Singleton bean无法实例化。任何的想法?提前谢谢。
答案 0 :(得分: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);
}
}
/ * edit * /
只是有时间尝试一下。该构造应该可用于DAO,因为该方法在事务中执行,并且EntityManager(在SLBService中)也正确注入。正如预期的对其他EJB的引用尚未解决,因此请注意这一点。