簡體   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