I have a resource (Spring bean) which has some of its fields injected by Spring, for example:
@Repository(value="appDao")
public class AppDaoImpl implements AppDao {
@PersistenceContext
EntityManager entityManager;
public Resource() {
... use entityManager ... // doesn't work
}
}
I know that I can’t access the injected entityManager in the constructor and should use a @PostConstruct annotation on a different method. But what are the reasons for this?
Because Spring can’t access any fields or methods before the object is created (which is done through the constructor). So Spring instantiates the object using the constructor and then injects the properties.
The only way around this is to use Constructor Injection (which can be cumbersome if you have multiple dependencies). I think what you should do is move your code out of the constructor and into an initialization method using the
@PostConstructannotation: