gpt4 book ai didi

java - 为什么不调用 PostConstruct?

转载 作者:IT老高 更新时间:2023-10-28 20:50:09 29 4
gpt4 key购买 nike

我正在开发一个简单的 Java EE 应用程序。

我有这样的课:

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

@Stateless
public class BlogEntryDao {

EntityManager em;

@PostConstruct
public void initialize(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistence");
em = emf.createEntityManager();
}

public void addNewEntry(){
Blogentry blogentry = new Blogentry();

blogentry.setTitle("Test");
blogentry.setContent("asdfasfas");

em.persist(blogentry);

}
}

所以我的托管 bean 调用了这个方法。直到这里没有问题。但是由于没有调用初始化方法,我在 em.persist 中得到了一个 NPE。

为什么没有调用初始化方法?我在 Glassfish 服务器上运行它。

问候。

最佳答案

@PostConstruct 等 Java EE bean 注释仅适用于容器管理的 bean。如果您只是自己调用 new BlogEntryDao,容器不会拦截创建并调用 @PostConstruct 方法。

(此外,您最好使用 @PersistenceContext@PersistenceUnit 而不是在 中手动获取 EntityManagerFactory initialize() 方法,并且您应该为每次调用 addNewEntry() 创建一个 EntityManager,因为它们是短暂的。进行这些更改会完全不需要 initialize()。)

关于java - 为什么不调用 PostConstruct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18161682/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com