【发布时间】:2016-09-04 11:45:10
【问题描述】:
我正在尝试创建一个具有EntityManager 的审计服务。但是,当我运行应用程序时,这个EntityManager 从未初始化,所以在调用它时,它会抛出一个NullPointerException。
我的代码如下所示:
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Service
public class AuditServiceImpl implements AuditService {
private static final String FULL_NAME = "%s %s";
@PersistenceContext
private EntityManager entityManager;
public EntityManager getEntityManager(){
return entityManager;
}
}
我希望@PersistenceContext 注释会为我解决这个问题,但它没有。我看到其他几个关于类似问题的帖子,但大多数解决方案似乎已经过时,所以我决定创建另一个帖子。
任何人都可以阐明这个问题,甚至是解决方案吗?
【问题讨论】:
-
您是如何创建
AuditServiceImpl实例的? -
我使用默认构造函数。
-
你如何期望 Spring 将依赖项注入到它不知道的 bean 实例中?如果您自己创建实例,则不会注入任何依赖项。
-
如果我让 Spring 通过使用注释 @PersistenceContext 或 @PersistenceUnit 创建它(此时我迷失在这些注释中)它仍然会给出 NullPointerException..
-
那你配置错了。首先不要自己创建实例,使用依赖注入。如果您需要
AuditService注入它,请不要创建它。如果使用 XML,请确保您有<context:component-scan />或(使用 java 配置时为@ComponentScan)。如果你有这些并且你也让 Spring 管理你的实体管理器,它将被注入。如果不是,你真的错过了一些东西。我强烈建议阅读参考指南,了解如何注入EntityManager或EntityManagerFactory以及两者之间的区别。
标签: java spring hibernate hibernate-entitymanager