SpringIOC通過註解實現DI(dependence injection,依賴注入)

照水然犀發表於2020-10-14

Spring中可以通過xml檔案進行ioc容器內bean的管理,通過註冊相應的java bean類實現相應的依賴注入。
除此之外它還支援另外一種更加方便快捷的方式-------使用註解。達到依賴注入的目的,與依賴注入相關的常用註解如下:

@Repository //資料庫類
@Component  //元件類
@Service    //服務類
@Controller  //控制器類
@AutoWired   //自動注入
@Qualifier  //指定注入的bean的id

在使用註解之前要先匯入context名稱空間,如果使用IDEA在使用context名稱空間時會自動匯入,匯入名稱空間之後,使用包掃描語句:

<context:component-scan base-package="包名"></context:component-scan>

告訴Spring 要去哪些包中尋找新增了註解需要執行相應操作的類
包名寫的應儘量詳細(例如只寫個:com.*,同樣也能掃描到相應的類,達到預定目的,但是可能com開頭的包很多,如果寫的太粗略會增加掃描時長)

註解含義

前面四個註解,用於標記相應功能的類,@Repository @Component @Service @Controller

Repository:對應我們常說的Dao(Data Access Object)層,用於新增在相應dao層類上
Service:用於和經常Dao層對接的服務類
Controller:這個註解應該新增在控制器類上(其實就是Servlet類)
Component:如果要新增註解的類不屬於上面說的,或者你分不清它應該新增什麼註解,那麼就可以使用這個註解,將被註解的類歸為元件類

另外,標註什麼註解在處理時並不會區別對待,之所以會有這麼多類別的註解,是為了方便他人讀懂程式碼

Autowired :它的作用是,將對應的bean注入到java類中的屬性當中
常用的用法是加在類的屬性當中,此外它還可以加在方法,方法的引數,構造器上

  • 加在屬性上時:會自動在IOC容器中為屬性注入值,如果沒有特別指定,將使用注入bean的類名的首字母小寫形式

  • 加在方法上:spring掃描時會自動呼叫該方法,並使用ioc容器中註冊的bean當成引數傳入

  • 加在構造器上:建立這個類時,會呼叫此構造器,並且使用ioc容器中的bean 作為引數

  • 加在方法引數上:呼叫這個方法時會使用IOC容器中相應的bean 注入(和@Qualifier一起使用,取消@AutoWired 的預設注入行為)

Qualifier:這個註解的作用是取消Auto的預設行為,通過引數影響AutoWired行為,比如當使用字串作為引數時,會使用字串內容作為id注入相應的bean

相關文章