2014-01-29 68 views
2

最近我和我的朋友討論了在實體(JPA)類上使用Spring @Autowire註釋的問題。何時使用Spring @Autowire註釋

在我們的項目中,我們使用@Autowire註釋來注入Entity,但我的朋友建議不要在實體類中使用@Autowire註釋。當我問爲什麼?他沒有正確的答案。所以我只想知道在實體類中使用@Autowire註釋是否存在任何缺點。

另請說明何時去@Autowire註釋或不帶示例。

提前致謝。

+0

我的項目是JSF,JPA和SPRING的集成,通過* @ Autowire *獲取控制器中的公司對象。 Entiy類 * @ *實體* 表@(NAME = 「T_Company」)* 類公司{} Controller類 類CompanyController {// 這wthin我使用實體調用 * @ *自動裝配 公司公司; //我做其他opertions } 應用bean.xml <豆ID = 「公司」 類= 「xxx.Company」/> ,我已經在 的persistence.xml XXX中定義的實體。公司 在My CompanyController中最好使用@Autowire Compnay,或者我必須使用Company c = new Company()以及使用哪一個,爲什麼? – Girish

回答

3

@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

UPDATE: 繼在下面評論:
公司是你的域對象,所以你不需要在這種情況下使用spring。

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

以上將返回與@autowire相同的實例。
即使你切換到範圍=「原型」,我沒有看到任何理由使用彈簧。 您應該有一個服務,將被用於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和服務的常見做法。

+0

我的項目是JSF,JPA的整合和SPRING並得到公司目標由* @自動裝配* 實體類控制器 * @實體* * @表(名稱= 「T_Company」)* 類公司{} 和我有控制器calss像 類公司控制器{ //因此,我正在使用實體調用 * @ Autowire * 公司公司; //我做其他opertions } 應用bean.xml <豆ID = 「公司」 類= 「xxx.Company」/> ,我已經在 的persistence.xml XXX中定義的實體。公司 在CompanyController中最好是使用@Autowire Compnay還是使用Company c = new Company()以及使用哪一個?爲什麼? – Girish

2

@Autowire是用於執行依賴注入的註釋,它與標準@Inject幾乎相似,您可以查看Spring參考手冊以查看這兩個註釋之間的區別。

@Entity是jpa框架的一部分,它用於將類標記爲持久化,Spring不實現等效標註。