【问题标题】:When to use Spring @Autowire annotation何时使用 Spring @Autowire 注解
【发布时间】:2014-02-20 19:54:13
【问题描述】:

最近我和朋友讨论了在实体(JPA)类上使用Spring @Autowire注解。

在我们的项目中,我们使用@Autowire注解来注入Entity,但我的朋友建议不要在实体类上使用@Autowire注解。当我问为什么?他对此没有正确的答案。所以我只是想知道在实体类上使用@Autowire 注释有什么缺点。

另外请举例说明何时使用@Autowire注解。

提前致谢。

【问题讨论】:

  • 我的项目是 JSF、JPA 和 SPRING 的集成,并通过 @Autowire 在控制器中获取公司对象。 Entiy class @Entity @Table(name="T_Company") class Company{} Controller class class CompanyController{ // 我使用实体调用 @Autowire 公司公司; // 我做其他操作 } application-bean.xml 我已经在 Persistence.xml xxx.Company 中定义了实体在我的CompanyController 是最好使用@Autowire Compnay 还是我必须使用 Company c=new Company() 以及使用哪一个以及为什么?

标签: spring jpa entity autowired


【解决方案1】:

@Entity 和 @Autowire 不可互换。

@Entity注解表明JavaBean是一个持久化的实体。这实际上是一个JPA注解而不是一个Spring注解。
@Entity 将被 packagesToScan poroerty 在 sessionFactory 中使用。

@Autowired:按类型注入资源,即按类或带注释字段或承包商的接口。看我的回答Inject and Resource and Autowired annotations
@Autowired 用于注入依赖项作为通过 xml 配置设置它的替代方法

也许这个答案会帮助你理解 Hibernate - spring annotated entities not scanned from within jar

更新: 在下面的评论之后:
Company 是您的域对象,因此在这种情况下您不需要使用 spring。

<bean id="company" class="xxx.Company"/>

上面将返回与@autowire 相同的实例。
即使您切换到 scope="prototype" 我也看不出有任何理由为此使用 spring。 您应该有一项将用于 CRUD 公司的服务,例如 CompanyService,此服务将是单音的,因此您将使用@Autowire 将其注入控制器,它将使用您的 JPA 框架来实现 CRUD 的

要创建一个您将使用的新公司:

Company c = new Company  //this probably will  be binded from your ui form 
companyServic.saveOrUpdate(c);

请参阅以下答案spring rest service - hibernate dao - annotations - pojo - namedqueries。 DAO 和服务的常见做法。

【讨论】:

  • 我的项目是 JSF、JPA 和 SPRING 的集成,并通过 @Autowire 实体类 @Entity @Table 在控制器中获取公司对象(name="T_Company") class Company{} 并且我有控制器类,例如 class CompanyController{ // 在此我使用实体调用 @Autowire Company company; // 我做其他操作 } application-bean.xml 我已经在 Persistence.xml xxx.Company 在 CompanyController 中定义了实体是使用@Autowire Compnay 还是使用 Company c=new Company() 以及使用哪一个以及为什么?
【解决方案2】:

@Autowire 是一个用于执行依赖注入的注解,它与标准的@Inject 几乎相似,您可以查看 Spring 参考手册了解这两个注解之间的区别。

@Entity 是 jpa 框架的一部分,它用于将类标记为持久性,spring 没有实现等效的注解。

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 2015-03-06
    相关资源
    最近更新 更多