Java 将无状态bean注入到单例bean中

Java 将无状态bean注入到单例bean中,java,singleton,ejb-3.1,stateless-session-bean,Java,Singleton,Ejb 3.1,Stateless Session Bean,我有这个要求:我有一个单例bean,我有一个用@PostConstruct注释的方法,在这里我执行一些初始化。其中一个初始化是从数据库中读取一些值,所以我想在这个方法中注入一个无状态bean,它是一个访问数据库的服务bean。我不想将无状态bean作为字段注入到singleton bean中,因为只有在这个方法中才需要它(singleton bean中没有其他方法)。为此,我在singleton bean中写了以下内容: @Singleton public class MySingletonBe

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

@Singleton
public class MySingletonBean {

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

问题是单例bean不能被实例化。有什么想法吗?提前谢谢。

由于@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的引用还没有得到解决,所以请注意这一点