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方法,否則...