Joh*_*nak 7 java spring dependency-injection
我有一个资源(Spring bean),它的一些字段由Spring注入,例如:
@Repository(value="appDao")
public class AppDaoImpl implements AppDao {
@PersistenceContext
EntityManager entityManager;
public Resource() {
... use entityManager ... // doesn't work
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我不能在构造函数中访问注入的entityManager,并且应该@PostConstruct在不同的方法上使用注释.但是这有什么原因呢?
Sea*_*oyd 14
因为Spring在创建对象之前无法访问任何字段或方法(这是通过构造函数完成的).所以Spring使用构造函数实例化对象,然后注入属性.
解决这个问题的唯一方法是使用构造函数注入(如果您有多个依赖项,这可能很麻烦).我认为你应该做的是移动你的代码出了构造并进入使用初始化方法的@PostConstruct注释:
@PostConstruct
public void init(){
// do stuff with entitymanager here
}
Run Code Online (Sandbox Code Playgroud)
原因在于bean的生命周期:
@PostConstruct方法(如果有)。Spring(并且没有人)可以在实际构造该对象之前为该对象设置字段。
您可以使用构造函数注入 - 将依赖项传递给非默认构造函数,但不可能使用@PersistenceContext
| 归档时间: |
|
| 查看次数: |
6849 次 |
| 最近记录: |