Spring學習筆記

1、Inversion of Control 反射控制java

  一、在spring中體現爲「依賴注入」,具體方式就是:由spring的IoC Service Provider提供服務:spring

  

  二、注入的具體方式:三種框架

  (1)構造方法注入:這個簡單,就是在聲明一個構造方法,IoC Service Provider檢查被注入對象的構造方法,而後爲其注入依賴對象,所以,被注入對象的構造乃至整個生命週期都應該由IoC Service Provider管理ide

  (2)setter注入方式:就是在類中提供getter/setter方法,方便spring在須要時注入有關類,固然setter的參數是一個接口測試

  (3)接口注入方式:某類實現一個接口,IoC Service Provider經過該接口來了解應該爲被注入對象注入什麼依賴對象ui

  

  這種方式雖然達到了依賴注入的目的,但被注入對象必須聲明和實現另外的接口,即引入了另外的東西,顯得有點畫蛇添足。this

  IoC的意義:從主動獲取到依賴注入,到底有什麼好處?大概有這樣的:不會對業務對象形成很強的入侵性,使用IoC後,對象具備更好的可測試性、可重用性、可擴展性——————這些都是泛泛而談,具體的做用,在項目中實踐總結吧。編碼

  3.IoC的實現:IoC如何知道諸多對象間的對應關係,無非是這幾種笨辦法:直接編寫代碼來註冊這些對應信息、XML文件記錄對應信息、其餘一切有效的方式spa

  (1)直接編碼的方式是在容器啓動以前,咱們就經過程序編碼的方式將被注入對象和依賴對象註冊到容器中,並聲明他們的依賴注入關係,例若有這樣的代碼:code

IoContainer container = ...;
container.register(FXNewsProvider.class, new FXNewsProvider());
container.register(IFXNewsListener.class, new DowJonesNewsListener());
...
...
FXNewsProvider newsPrivoder = (FXNewsProvider)container.get(FXNewsProvider.class);
newProvider.getAndPersistNews();
...

  簡直說就是先在容器中註冊好具體實例,當須要時就從容器中拿出來返回給咱們。在接口方式實現的時候,除了上面的代碼外,還要加一個,將「注入標誌接口」與相應的依賴對象綁定一下,才能讓容器知道是怎樣的對應關係。

IoContainer container = ...;
container.register(FXNewsProvider.class, new FXNewsProvider());
container.register(IFXNewsListener.class, new DowJonesNewsListener());
...
container.bind(IFXNewsListenerCallable.class, container.get(IFXNewsListener.class));
...
FXNewsProvider newsPrivoder = (FXNewsProvider)container.get(FXNewsProvider.class);
newProvider.getAndPersistNews();
...

  (2)xml配置文件方式,在spring配置文件中管理和保存依賴注入信息。

<bean id="newsProvider" class="..FXNewsProvider">
    <property name="newsListener">
        <ref bean="djNewsListener"/>
    </property>
    <property name="newPersistener">
        <ref bean="djNewsPersister"/>
    </property>
</bean>
<bean id="djNewsListener" class="..impl.DowJonesNewsListener">
</bean>
<bean id="djNewsPersister" class="..impl.DowJonesNewsPersister">
</bean>        

讀取配置文件完成裝配,而後調用:

...
container.readConfigurationFiles(...);
FXNewsProvider newsProvide = (FXNewsProvider)container.getBean("newProvider");
newsProvider.getAndPersistNews();
...

  (3)元數據方式,表明實現是Google Guice,這是一套IoC框架,運用java註解來實現對象依賴注入

public class FXNewsProvider{
    private IFXNewsListener newsListener;
    private IFXNewsPersister newsPersister;
    @Inject
    public FXNewsProvider(IFXNewsListener listener, IFXNewsPersister persister){
        this.newsListener = listener;
        this.newsPersister = persister;
    }
}

這裏經過註解的方式,指明須要IoC Service Provider經過構造方法注入,餘下的信息由Guice的Module提供。

相關文章
相關標籤/搜索