什么是IOC,它的好處是什么


IOC 即控制反轉。將對象的控制權反過來交給spring進行管理。實現了對象與對象之間的解耦合。

什么是控制?控制權指的是類的對象的創建和使用的權利。 比如A類和B類,在A類中創建B類對象,並調用B類的方法,那么我們稱A類有B類的控制權。

而控制反轉即A類將創建的B的操作交給spring來做。A只需要向spring 獲取B對象即可。

 

它的好處是,對象的構建如果依賴非常多的對象,且層次很深,外層在構造對象時很麻煩且不一定知道如何構建這么多層次的對象,IOC幫我們管理對象的創建,只需要在配置文件里指定如何創建,每一個對象的配置文件都在類編寫的時候指定了,所以最外層對象不需要關心深層次對象如何創建的,前人都已經寫好了;

 

例如:

定義一個接口ByeService,里面有一個bye方法,並創建兩個實現類(中文和英文的),通過spring將對象注入UserAction類中;

我的目錄為(僅供參考):

1、先寫兩個實現類;

ChineseService.java中的代碼為:
package before;

public class ChineseService implements ByeService{
    @Override
    public void sayBye(){
        System.out.println("Today is 520 but I more like play code");
    }
}
EnglishService.java中的代碼為:
package before;

public class EnglishService implements ByeService {
    @Override
    public void sayBye(){
        System.out.println("今天是520,但是我更喜歡敲代碼");
    }
}

2、定義一個接口ByeService,目的是讓兩個實現類去實現這個接口;

ByeService.java中的代碼為:
package before;

public interface ByeService {
    void sayBye();
}

3、寫一個spring配置文件applicationContext.xml;

applicationContext.xml中的代碼為:
<?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.xsd">

    <bean class="before.ChineseService" id="chineseService"></bean>
    <bean class="before.EnglishService" id="englishService"></bean>
    <bean class="spring.UserAction" id="userAction">
        <property name="byeService" ref="englishService"></property>
    </bean>
</beans>

4、寫一個UserAction去測試是否成功;

UserAction.java中的代碼為:
package spring;

import before.ByeService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserAction {
    private ByeService byeService;

    public void bye(){
        byeService.sayBye();
    }
    public void setByeService(ByeService byeService){
        this.byeService=byeService;
    }

    public static void main(String[] args) {
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("/applicationContext.xml");
        UserAction userAction= (UserAction) applicationContext.getBean("userAction");
        userAction.bye();
    }
}

測試結果為:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM