java
中註解,與反射,泛型一樣,同屬超程式設計。而相較於反射作用類物件,泛型活在引數型別化征途,註解簡直不要太自在,這從它的出生(定義),@interface
,便知不能獨立生存,時刻與被註解物件在一起,是一種緊耦合,宣告式程式設計方式。本文旨在闡述@component
註解與其同類註解(如@service
)的異同。
官方
Annotation | Meaning |
---|---|
@Component | generic stereotype for any Spring-managed component |
@Repository | stereotype for persistence layer |
@Service | stereotype for service layer |
@Controller | stereotype for presentation layer (spring-mvc) |
相似
上述官話,只說明瞭spring 中 該類註解用途,但沒講明,有些情況下它們為什麼可以互用
- 強調一點,對於
BeanDefinition
自動掃描檢測和依賴注入,所有這些註解(即@ Component,@ Service,@ Repository,@ Controller
)都是相同的,它們彼此可以相互替換
差異
@Component
...
- 是一個通用的構造型註釋,表明該類是一個spring元件
@Component
的特殊之處<context:component-scan>
僅在於掃描@Component
並且不會查詢@Controlle
r,@Service
並且@Repository
一般而言。掃描它們是因為它們本身都帶有註釋@Component
, 看原始碼定義便知
@Component
public @interface Service {
….
}
@Component
public @interface Repository {
….
}
@Component
public @interface Controller {
…
}
@Controller,@Service
並且@Repository
是特殊型別的@Component
註解。<context:component-scan>
選擇它們並將它們的後續類註冊為bean
,就像它們被註解一樣@Component
- 還會掃描特殊型別的註釋,因為它們本身都帶有
@Component
註解的註解