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

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

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

    MicroFish

    Open & Open hits
    隨筆 - 33, 文章 - 2, 評(píng)論 - 4, 引用 - 0
    數(shù)據(jù)加載中……

    《Pro Spring》學(xué)習(xí)筆記(3)--Spring中的IOC

    ?

    ??????控制反轉(zhuǎn)包括兩種類(lèi)型:依賴查找(Dependency Lookup)和依賴注入(Dependency Injection),我們主要討論的是依賴注入。
    ????? 依賴注入可以分為兩種類(lèi)型:構(gòu)造子注入(Constructor Dependency Injection)和設(shè)值注入(Setter Dependency Injection)
    ????? 構(gòu)造子注入,組件的依賴關(guān)系是通過(guò)構(gòu)造函數(shù)來(lái)提供的,每個(gè)依賴關(guān)系對(duì)應(yīng)構(gòu)造函數(shù)的各個(gè)參數(shù),IOC容器在實(shí)例化組件時(shí),通過(guò)構(gòu)造函數(shù)注入依賴關(guān)系。
    public class ConstructorInjection {
    ??? private Dependency dep;
    ??? public ConstructorInjection(Dependency dep) {
    ??????? this.dep = dep;
    ??? }
    }
    構(gòu)造子注入適用于在使用某個(gè)組件之前,確保所有的依賴關(guān)系都已注入。
    ????? 設(shè)值注入,組件的依賴關(guān)系是通過(guò)JavaBean形式的setter方法注入的,IOC容器通過(guò)調(diào)用相應(yīng)的set方法注入依賴關(guān)系。
    public class SetterInjection {
    ??? private Dependency dep;
    ??? public void setMyDependency(Dependency dep) {
    ??????? this.dep = dep;
    ??? }
    }
    設(shè)值注入適用于需要給某些依賴關(guān)系提供默認(rèn)值的情況。
    ????? Spring IOC容器的核心是BeanFactory,BeanFactory負(fù)責(zé)管理組件以及組件間的依賴關(guān)系。術(shù)語(yǔ)bean在Spring中代表由容器管理的任何組件。Spring提供了兩種常用的BeanFactory實(shí)現(xiàn):DefaultListableBeanFactory和XmlBeanFactory。
    ????? 在BeanFactory中,每個(gè)bean都至少有一個(gè)名稱,作為唯一標(biāo)識(shí),如果bean擁有多個(gè)名稱的話,那么除第一個(gè)名稱外的其它名稱都將被認(rèn)為是別名。
    ????? DefaultListableBeanFactory可以使用PropertiesBeanDefinitionReader或者XmlBeanDefinitionReader(當(dāng)然還可以是其它任何實(shí)現(xiàn)了BeanDefinitionReader接口的Bean定義讀取器)來(lái)讀取配置文件。
    //使用PropertiesBeanDefinitionReader
    private static BeanFactory getBeanFactory() throws Exception {
    ??? // get the bean factory
    ??? DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
    ??? // create a definition reader
    ??? PropertiesBeanDefinitionReader rdr = new PropertiesBeanDefinitionReader(factory);
    ??? // load the configuration options
    ???
    Properties props = new Properties();
    ??? props.load(new FileInputStream("./ch2/src/conf/beans.properties"));
    ??? rdr.registerBeanDefinitions(props);
    ??? return factory;
    }
    //使用XmlBeanDefinitionReader
    private static BeanFactory getBeanFactory() throws Exception {
    ??? // get the bean factory
    ??? DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
    ??? // create a definition reader
    ??? XmlBeanDefinitionReader rdr = new XmlBeanDefinitionReader(factory);
    ??? // load the configuration options
    ??? rdr.loadBeanDefinitions(new FileSystemResource("ch4/src/conf/beans.xml"));
    ????return factory;
    }
    ????? XmlBeanFactory繼承了DefaultListableBeanFactory,在使用XML配置文件時(shí)可以簡(jiǎn)化代碼的編寫(xiě),這也是我們最常用的BeanFactory。
    private static BeanFactory getBeanFactory() throws Exception {
    ??? XmlBeanFactory factory =
    ??????? new XmlBeanFactory(new FileSystemResource("ch4/src/conf/beans.xml"));
    ????return factory;
    }
    ????? 獲得了BeanFactory對(duì)象后,我們就可以使用bean的名稱來(lái)獲取我們需要的組件對(duì)象了。
    Oracle oracle = (Oracle)factoyr.get("oracle");

    posted on 2006-12-21 10:20 劉璐 閱讀(315) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): spring

    主站蜘蛛池模板: 最近中文字幕大全免费视频| 亚洲精品~无码抽插| 亚洲AV无码无限在线观看不卡| 久久国产免费观看精品3| 亚洲精品视频在线播放| 成人黄色免费网址| 2020久久精品亚洲热综合一本| 91成年人免费视频| 亚洲国产日韩精品| 免费h成人黄漫画嘿咻破解版| 国产精品亚洲专区在线播放| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲精品第一国产综合境外资源 | 91情国产l精品国产亚洲区| 久久国产乱子伦免费精品| 亚洲国产日韩在线人成下载| 精品久久久久国产免费| 亚洲a∨无码精品色午夜| 亚洲第一永久AV网站久久精品男人的天堂AV| 青青久久精品国产免费看| 亚洲中文字幕久久精品无码喷水 | 日韩免费高清一级毛片| 国产午夜亚洲精品午夜鲁丝片 | 亚洲精品第一国产综合亚AV| 国产极品粉嫩泬免费观看| 一级人做人爰a全过程免费视频| 国产亚洲无线码一区二区| 麻豆视频免费播放| 国产午夜亚洲精品不卡免下载| 久久久久亚洲精品无码网址| 99热在线免费播放| 亚洲av无码专区在线电影天堂| 亚洲中文字幕无码一区二区三区| 亚洲一区免费观看| 亚洲精品无码成人片久久不卡| 伊人久久精品亚洲午夜| 亚洲高清免费在线观看| 免费国产高清毛不卡片基地| 亚洲色图在线观看| 无码欧精品亚洲日韩一区夜夜嗨 | 精品久久久久成人码免费动漫|