<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    linugb118--java space

    Java

    Spring Ioc 學(xué)習(xí)點(diǎn)滴

    1.原則: Don't call us,we will call you

    2.原來構(gòu)建對象,對象內(nèi)如果有其他依賴對象,需要一個個構(gòu)建后傳入,現(xiàn)在直接先注入好,構(gòu)建原對象的時候
    它會直接向Ioc service Provider 去要

    3.注入對象的方式有
    A. 構(gòu)造方法方式注入
    B.通過setter 方式注入
    C.實(shí)現(xiàn)提供的接口來注入

    4.Ioc service provider 有兩種功能
    A. 業(yè)務(wù)對象構(gòu)建管理
    B. 業(yè)務(wù)對象間依賴綁定

    5.Ioc service provider 簡化代碼來構(gòu)建對象,但是這些依賴條件Ioc service provider
    如何知道?
    A.直接編碼方式知道
    比如
    IoContainer container=...
    container.register(FXNewProvider.class,new FXNewsProvider());

    B.配置文件方式
    <bean id="newsProvider" ...>
    ....
    </bean>

    C.通過注解來注入

    6.Spring Ioc 容器
    Ioc service provider 是其中的一部分
    Ioc 容器spring提供兩種類型
    A.BeanFactory :基礎(chǔ)類型Ioc 容器 默認(rèn)為延時初始化策略,啟動快需要資源有限
    B.ApplicationContext:BeanFactory 基礎(chǔ)上構(gòu)建,屬于高級容器,提供事件發(fā)布,國際化等
    高級功能,需要資源相對多,啟動相對也就慢。


    7.bean 的生命周期
    A.singleton: 在spring Ioc 容器中只存在一個實(shí)例,他的生命周期從容器啟動并因?yàn)榈谝淮伪?br /> 請求而初始化后,將一直存活到容器退出。這里的singleton 和Gof中提出的Singleton 有點(diǎn)區(qū)別
    bean的singleton 表示在同一個容器中存在一個實(shí)例;而Gof中的Singleton表示同一個classloader中
    只存在一個實(shí)例。

    B.prototype:代理
    容器在接收到請求后,為之生成一個新對象實(shí)例給請求方,然后就不再有新對象的引用。

    C.request,session,global session
    只適用web 應(yīng)用,不像上面的那么通用。通常與XmlWebApplicationContext一起用
    request:每一個請求生成一個新的requestProcessor 對象,和http request的生命周期一樣
    session:和http session 生命周期一個
    global session:只應(yīng)用在基于portlet 的web應(yīng)用程序才有意義。映射到portlet的global
    范圍的session

    D.自定義scope類型
    實(shí)現(xiàn)org.springframework.beans.factory.config.Scope接口
    public infterface Scope{
    ...
    }

    其中g(shù)et和remove 方法必須實(shí)現(xiàn),參考例子
    http://jroller.com/eu/entry/more_fun_with_spring_scopes
    有了Scope的實(shí)現(xiàn)類后,需要把Scope注冊到容器中,才能提供相應(yīng)的bean定義
    通過ConfigurableBeanFactory的 registerScope中進(jìn)行注冊。BeanFactory
    通常實(shí)現(xiàn)ConfigurableBeanFactory接口。
    如果是ApplicationContext,你還可以通過配置文件來實(shí)現(xiàn),ApplicationContext
    會自動識別并加載.

    E.面向接口編程指以接口為導(dǎo)向,在類中引用接口而不是具體接口的實(shí)現(xiàn)類,這樣就減少和
    特定實(shí)現(xiàn)類的耦合,比如傳統(tǒng)寫法
    public class Foo{
     private BarInterface barInstance;
     public Foo()
     {
        barInstance = new BarInterfaceImp();
        //BarInterfaceImp其實(shí)是BarInterface 接口的實(shí)現(xiàn)類
     }
    }

    上面的寫法耦合很大,如果該類是由我們設(shè)計并開發(fā)的,那么還好說,我們可以通過依賴注入,
    讓容器幫助我們解除接口和實(shí)現(xiàn)類之間的耦合性,但是,有時,我們需要依賴第三方庫,需要實(shí)例化
    并通過第三方庫中的相關(guān)類,這時,接口和實(shí)現(xiàn)類的耦合性需要其他方式來避免。
    比如工程方法模式。提供一個工廠類來實(shí)例化具體的接口實(shí)現(xiàn)類,這樣主體對象只需要依賴工廠類,具體使用的實(shí)現(xiàn)類有變革的話,只要變更工廠類。
    上面的Foo可以改為:
    public class Foo{
     
     private BarInterface barInterface;
     public Foo()
     {
      //barInterface = BarInterfaceFactory.getInstance();
      或者
      //barInterface =new BarInterfaceFactory().getInstance();
     }
    }
    靜態(tài)工廠方法:
    public class StaticBarInterfaceFactory
    {
     public static BarInterface getInstance()
     {
      return new BarInterfaceImpl();
     }
    }
    spring 提供配置來支持靜態(tài)工廠方法
    <bean id="bar" class="...StaticBarInterfaceFactory" factory-method="getInstance">
    //如果factory-method 有參數(shù)可以,進(jìn)入下面參數(shù)
    <constructor-arg>
    <ref bean="foobar">
    </constructor-arg>
    </bean>

    非靜態(tài)工廠方法:
    public class NoStaticBarInterfaceFactory
    {
     public  BarInterface getInstance()
     {
      return new BarInterfaceImpl();
     }
    }

    spring配置如下:
    <bean id="barFactory" class="...NoStaticBarInterfaceFactory" />
    <bean id="bar" factory-bean="barFactory" factory-method="getInstance" />

    FactoryBean:spring 提供的生產(chǎn)對象的工廠bean
    只需要實(shí)現(xiàn)org.springframework.beans.factory.FactoryBean 接口
    public interface FactoryBean{
    //獲取實(shí)例
    Object getObject() throws Exception;

    //獲取實(shí)現(xiàn)相對于的類型
    Class getObjectType();
    //表明獲取的實(shí)例在容器中是否是singleton形式
    boolean isSingleton();

    }

    然后在spring 進(jìn)行bean定義
    <bean id="objectId" class="...FactoryBean"/>需要注意的是,這里的objectId不是
    FactoryBean類型,而是上面實(shí)現(xiàn)接口的具體getObjectType的類型。

    F.方法注入和方法替換。

    方法替換實(shí)現(xiàn)org.springframework.beans.facotry.support.MethodReplacer
    并在bean中定義
    <replaced-method name="getAndPersistNews" replacer="providerReplacer"/>
    <bean id="providerReplacer" class="...FXNewsReplacer">
    其實(shí)方法替換就是對方法的攔截。

    G.ApplicationContext特性
    Resource:spring 定義統(tǒng)一的資源
    ResourceLoader:有了資源,需要有加載工具。
    ResourcePatternResolver:是ResourceLoader的擴(kuò)展,resourceLoader每次只能根據(jù)
    資源返回單個Resource實(shí)例,而ResourcePatternResolver可以一次返回多個Resource

     

     

     


     

    posted on 2011-04-25 15:12 linugb118 閱讀(249) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 高清国语自产拍免费视频国产| a级毛片黄免费a级毛片| 91精品手机国产免费| 国产亚洲精久久久久久无码AV| 亚洲AV成人精品一区二区三区| 日本视频一区在线观看免费| 亚洲最大在线观看| 久操视频在线免费观看| 亚洲AV无码久久精品色欲| 免费看搞黄视频网站| 亚洲黄色中文字幕| 毛色毛片免费观看| 亚洲avav天堂av在线网毛片| 亚洲国产天堂久久综合| 97超高清在线观看免费视频| 久久精品亚洲中文字幕无码网站| 131美女爱做免费毛片| 亚洲va在线va天堂成人| 国产乱人免费视频| 一区二区三区视频免费观看| 亚洲精品国产精品乱码不99| 久久国产精品免费网站| 亚洲日韩乱码中文无码蜜桃臀| 四虎影视免费在线| 亚洲AV无码片一区二区三区| www国产亚洲精品久久久| 中文字幕版免费电影网站| 亚洲Av无码专区国产乱码DVD| 亚洲电影免费观看| 精品国产亚洲AV麻豆| 国产精品亚洲а∨无码播放| 国产精品视频免费观看| 精品国产亚洲第一区二区三区| 亚洲国产精品无码久久久蜜芽| 亚洲网站免费观看| 亚洲av永久无码一区二区三区| 国产亚洲精品激情都市| 五月婷婷综合免费| 一级毛片视频免费| 亚洲成a人片在线观看中文!!!| 亚洲M码 欧洲S码SSS222|