@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容器管理是不同的概念,所以別搞混了。
參考:
沒有留言:
張貼留言