是否可以使用 Spring 的依赖注入(inject)将 bean 注入(inject) JPA @Entity
?
我尝试@Autowire ServletContext,但是,虽然服务器确实启动成功,但我在尝试访问 bean 属性时收到了 NullPointerException。
@Autowired
@Transient
ServletContext servletContext;
最佳答案
您可以使用 @Configurable
将依赖项注入(inject)到不受 Spring 容器管理的对象中,如下所述:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/aop.html#aop-atconfigurable .
您现在已经意识到,除非使用 @Configurable
和适当的 AspectJ 编织配置,否则 Spring 不会将依赖项注入(inject)使用 new
运算符创建的对象中。实际上,除非您从 ApplicationContext
中检索到它们,否则它不会将依赖项注入(inject)对象,原因很简单,它根本不知道它们的存在。即使您使用 @Component
注释您的实体,该实体的实例化仍将由您或 Hibernate 等框架的 new
操作执行。请记住,注释只是元数据:如果没有人解释该元数据,它不会添加任何行为或对正在运行的程序产生任何影响。
话虽如此,我强烈建议不要将 ServletContext
注入(inject)实体。实体是域模型的一部分,应该与任何交付机制分离,例如基于 Servlet 的 Web 交付层。当命令行客户端或其他不涉及 ServletContext 的东西访问该实体时,您将如何使用该实体?您应该从该 ServletContext 中提取必要的数据,并通过传统方法参数将其传递给您的实体。通过这种方法,您将获得更好的设计。
关于spring - JPA @Entity 中的 Bean 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16471636/