網頁

2019/3/23

Spring Boot @ComponentScan與@EntityScan的差別

@ComponentScan@EntityScan的差別。


@ComponentScan是用來掃瞄有哪些package中的class要被註冊為Spring的bean。註冊為bean的意思是class的實例的生命週期及注入等交由Spring容器(Spring IoC Container)管理,如此該類別的實例才能透過@Autowired依賴注入物件。

@ComponentScan掃描的類別上要掛有@Component@Service@Controller@RestController@Repository@Configuration等才會被註冊為bean,如此bean的實例才會Spring容器管理並注入掛有@Autowired的成員變數中。


@EntityScan是用來掃描有哪些package中的class要被註冊為持久層所管理的實體類(entity class)。

entity class是指與資料庫中資料表映射的類別,只有掛有@Entity的類別才會被@EntityScan掃描並註冊。

例如資料庫中有個會員資料表MEMBER,則應用程式端會定義一個MemberEntity類別與MEMBER資料表戶為映射,在ORM框架(例如Spring Data JPA, Hibernate等)的幫助下,當entity class的內容改變時,MEBMER資料表中映射欄位的內容也會跟著改變。


所以一個只掛有@Entity的類別是否會被@ComponentScan掃描並註冊為Spring的bean嗎?當然是不會囉。是否為實體類與是否要被Spring IoC容器管理是不同的概念,所以別搞混了。


參考:

沒有留言:

張貼留言