1. 程式人生 > >spring IOC(控制反轉)及DI(依賴註入)

spring IOC(控制反轉)及DI(依賴註入)

version bsp rds 編碼 軟件 martin framework 結果 -i

什麽是ioc(控制反轉)

   IOC是一種設計思想,用來降低代碼與程序之間的耦合程度,把兩個直接相關的事物把直接相關的部分交給第三方作為中轉從而降低

了耦合性,方便後期維護。控制反轉也稱依賴註入,因為IoC確實不夠開門見山,因此業界曾進行了廣泛的討論,最終軟件界的泰鬥級人物

Martin Fowler提出了DI(依賴註入:Dependency Injection)的概念用以代替IoC,即讓調用類對某一接口實現類的依賴關系由第三方(容

器或協作類)註入,以移除調用類對某一接口實現類的依賴。“依賴註入”這個名詞顯然比“控制反轉”直接明了、易於理解。

依賴註入

即由容器(如spring)負責把組件所“依賴”的具體對象“註入”(賦值)給組件,從而避免組件之間以硬編碼的方式耦合在一起

public static void main(String[] args) {
        //找到配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //讀取內容
        Greeting greeting1 = (Greeting)context.getBean("greeting1");
        greeting1.sayGreeting();
        Greeting greeting2 = (Greeting)context.getBean("greeting2");
        greeting2.sayGreeting();
        
    }

配置文件內容如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd ">
<!-- id為實例後對象名 class為對象的類型 --> <bean id="greeting1" class="cn.pojo.Greeting"> <!--name為對象中的屬性名稱 value為賦值的內容 如果屬性為類類型則,使用ref屬性引用id --> <property name="words"> <value>三天不打鬼子,手都不自在</value> </property> <property name="person"> <value>小兵張嘎</value> </property> </bean> <bean id="greeting2" class="cn.pojo.Greeting"> <property name="words"> <value>世界上有十種人,認識二進制和不認識二進制的</value> </property> <property name="person"> <value>Rod</value> </property> </bean> </beans>

可以看到整個實例化過程及賦值,類和對象都沒有的直接關聯。很大程度上提高了代碼的可維護性。想一想如果我們要對屬性的初始值進行改動,它給我們帶來了什麽好處

按照之前的寫法直接寫死到類中,要改的時候需要直接去類中改,但這樣程序又需要重新編譯一次雖然平時可能感受不到,但寫項目的時候這個問題就會顯而易見,而配置

文件就不存在這個問題。

結果如下

技術分享圖片

接觸IOC這篇博客寫的著實不咋地,雖然自己心中模模糊糊有這個概念但是要描述出來確實不容易,大家可以參考下面兩篇大佬寫的博客。

http://stamen.iteye.com/blog/1489223/

http://jinnianshilongnian.iteye.com/blog/1413846

spring IOC(控制反轉)及DI(依賴註入)