註解 @component

pardon110發表於2019-08-13

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並且不會查詢@Controller,@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註解的註解

相關文章