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