Spring中Ioc的兩種方式

2021-10-07 10:51:34 字數 3399 閱讀 5543

3. ioc依賴查詢

控制反轉(inversion of control,ioc)是指將建立物件的權利交給框架,它是框架的重要特徵,並非物件導向程式設計的專用術語。它主要包含依賴注入(dependency injection)和依賴查詢(dependency lookup)。

其中依賴注入是被動的接收其依賴的其它元件被ioc容器注入;而依賴查詢是主動的去某個服務註冊地查詢其依賴的那些服務。它們之間的關係如下所示:

ioc的依賴注入可以分為兩個流程:

2.1 收集和註冊

在這個階段中,spring可以通過xml配置檔案或是註解**的方式來定義一些bean,然後通過手動組裝或者讓ioc容器基於某些機制自動掃瞄的方式,將定義好的bean收集到ioc容器中。

例如,通過xml檔案的形式配置標籤來手動的收集並註冊bean:

<?xml version="1.0" encoding="utf-8"?>

xmlns

=""xmlns:xsi

=""xsi:schemalocation

="/spring-beans.xsd"

>

"accountservice"

class

="dyliang.service.impl.accountserviceimpl"

>

name

="accountdao"

ref="accountdao"

>

property

>

bean

>

"accountdao"

class

="dyliang.dao.impl.iaccountdaoimpl"

>

name

="runner"

ref="runner"

>

property

>

bean

>

beans

>

​ 通過@component@repository@service@controller註解來讓spring幫程式收集並註冊定義的bean

@service

("accountservice"

)public

class

accountserviceimpl

implements

iaccountservice

@repository

("accountdao1"

)public

class

accountdaoimpl

implements

iaccountdao

如果嫌逐個收集 bean 定義麻煩,想批量地收集並註冊到 ioc 容器中,我們也可以通過 xml schema 形式的配置進行批量掃瞄並採集和註冊:

<

context:component-scan

base-package

="***x"

>

2.2 分析和組裝

經過收集和註冊階段得到的ioc容器中的bean,它們之間此時並沒有任何關係,但實際中不同bean之間會存在某些依賴,這就需要分析和組裝階段來完成。

如果 ioc 容器發現某個 bean 依賴另乙個 bean,它就會將這另乙個 bean 注入給依賴它的那個 bean,直到所有 bean 的依賴都注入完成。當所有的bean都組裝結束,整個 ioc 容器的工作即算完成。

例如,xml檔案中通過標籤內部的標籤的ref屬性來指向另乙個bean,表示兩者之間的依賴關係。或者使用@autowired@inject等註解在bean對應的類內部定義依賴類的物件,讓spring幫我們自動注入,完成依賴關係的繫結。

"accountservice"

class

="dyliang.service.impl.accountserviceimpl"

>

name

="accountdao"

ref="accountdao"

>

property

>

bean

>

"accountdao"

class

="dyliang.dao.impl.iaccountdaoimpl"

>

name

="runner"

ref="runner"

>

property

>

bean

>

@service

("accountservice"

)public

class

accountserviceimpl

implements

iaccountservice

在spring專案的測試類中,可以通過如下**獲取xml配置檔案形式對應的ioc容器:

new(

"bean.xml");

得到ioc容器後通過getbean()方法來獲取對應的bean的過程就是依賴查詢,其中bean()可以接受三種型別的引數

或者通過@contextconfiguration註解來通過spring自動獲取容器,然後在類中定義要使用的bean物件,並通過@autowired自動注入來獲取bean,最後只需要使用bean中相應的方法即可。

@contextconfiguration

(locations =

"classpath:bean.xml"

)public

class

accounttest

}}

spring建立ioc容器的兩種方式

bean是乙個由spring ioc容器例項化 組裝和管理的物件。第一種方式,基於xml檔案 long countbyexample userexample example int deletebyexample userexample example int deletebyprimarykey ...

Spring的兩種IOC容器

spring ioc 容器是整個spring框架的核心部分。容器會建立物件,配置物件之間的依賴關係,並且還會管理這些物件完整的生命週期。spring ioc容器使用依賴注入 d 來管理組成應用程式的元件。spring主要提供了兩種ioc容器 beanfactory本質上是乙個提供了可以維護註冊在它裡...

Spring的兩種注入方式

帶著前面的疑問,不斷的學習spring的知識,然後再回過頭去解決那些疑問。現在我們來看看spring的兩種注入方式 設值注入 設值注入式利用setter的方式為bean注入依賴關係的方式。上一節就是使用設值注入為bean注入依賴關係。設值注入的關鍵就是在類中必須存在乙個該屬性的setter方法,否則...