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

时间:2019-01-02 22:33:45

标签: java spring spring-boot

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

@Autowired
Customer customer

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

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

4 个答案:

答案 0 :(得分:1)

实际上,Spring仅对Spring Bean支持@Autowire。一个Java类只有在由Spring创建时才成为Spring Bean,否则不是。

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

请查看Spring文档,了解如何使用@Configurable

此外,我不知道您为什么要自动装配实体类?

答案 1 :(得分:1)

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

  • Spring Bean由Spring实例化和管理
  • 实体由JPA提供程序管理

答案 2 :(得分:0)

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

与此相反,@ Entity用于创建JPA的持久性上下文(据我所知),而JPA并不了解Spring及其上下文。

大多数使两个环境相互了解的解决方案大多有点怪异。

答案 3 :(得分:0)

您只能 autowire 仅将其生命周期由Spring IoC container管理的那些bean。

这些bean以xml形式定义,带有</bean>标签,或带有一些特殊注释,例如@Bean@Component@Service,{{1} }等。

另一方面,

简单来说,实体是一些Java对象,您将需要创建它们,根据业务逻辑自行更新并将它们保存/更新/从DB中删除。它们的生命周期无法通过 Spring IoC容器进行管理。

因此,如果做得对,您永远都不会觉得自己需要@Repository 自动接线