![](/img/trans.png)
[英]Can we use @Autowired in a Tasklet in Spring Batch?
[英]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 實體,因為:
如果您指的是 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.