繁体   English   中英

我们可以在 spring 的实体对象上使用 @autowired 吗?

[英]Can we use @autowired on an entity object in spring?

我有一个名为Customer的实体类,我在另一个类中使用这个实体对象来设置数据。 当我在下面使用这个对象时

@Autowired
Customer customer

Spring 抱怨请在您的类中配置 bean。

我们可以对实体对象使用自动连接吗?

您只能自动装配那些生命周期由Spring IoC 容器管理的 bean。

这些咖啡豆中所定义xml与形式</bean>标记,或与一些特殊注释等@Bean@Component@Service@Repository

另一方面,

简单来说,实体是一些你需要创建的 java 对象,根据你的业务逻辑自行更新,并在数据库中保存/更新/删除它们。 它们的生命周期不能由Spring IoC 容器管理。

所以,如果你做得对,你永远不应该觉得你需要自动装配一个entity

实际上,Spring 仅对 Spring Beans 支持@Autowire java类只有被Spring创建后才成为Spring Bean,否则不是。

一种解决方法可能是使用@Configurable注释您的类,但您必须使用 AspectJ

请查看有关如何使用@Configurable的 Spring 文档

另外,我想知道为什么要自动装配实体类?

我会警告你不要在一个类/用例中混合 Spring Bean 和 JPA 实体,因为:

  • Spring Beans 由 Spring 实例化和管理
  • 实体由 JPA 提供者管理

如果您指的是 JPA @Entity-annotation,则 Spring 只是在告诉您,其上下文中没有 bean。 在启动/运行时应用程序中的类将被扫描,每个用 @Component、@Service 等 spring 注释的类将被实例化为 bean 并放入全局上下文 (Spring applicationcontext)。 当在扫描过程中发现 @Autowired 时,此上下文然后用于查找这些 bean 并将其注入其他 bean。

与此相反,@Entity 在创建 JPA 的 Persistence-Context 期间使用(据我所知),它不知道 Spring 及其上下文。

大多数使两个上下文相互了解的解决方案大多有点hacky。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM