spring - JPA @Entity 中的 Bean 注入(inject)

标签 spring spring-mvc jpa

是否可以使用 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/

相关文章:

java - 如何从 jar 访问 ClassPath 资源?

java - 如何离线使用 RestTemplate 对类进行单元测试?

java - 消息摘要哈希MD5

java - org.springframework.beans.factory.BeanCreationException 错误

Java - 如何使用postman插入数据

java - Spring安全更改sessionid

java - JPA生成错误的SQL语句

java - 删除 Spring RepositoryRestResource 中的 "_embedded"属性

spring-boot - lateinit属性vkUserRepository尚未初始化。为什么?

java - Spring JPA 中的 SQL 聚合 GROUP BY 和 COUNT