1. 程式人生 > >Spring4(2)——IOC控制反轉 (概念理解)

Spring4(2)——IOC控制反轉 (概念理解)

控制 引用 接口 java的反射機制 test 法則 imp 基礎上 ava

1.IOC控制反轉的概念

IOC(控制反轉:Inverse of Control ),又稱作 依賴註入,是一種重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的 Spring 框架的核心。

2. IOC控制反轉舉例理解

  1. 實現功能:一個員工(張三)完成測試工作

    // 員工1實體:ZhangShang.java
    public class ZhangSan {
    
        public void test(){
            System.out.println("張三-測試程序");
        }
    }
    // 工作類:JavaWork.java
    public class JavaWork {
    
      
    public void doTest(){     ZhangSan zhangsan=new ZhangSan();     zhangsan.test();   } }
    // 主管測試類:Test.java
    public class Test {
    
        public static void main(String[] args) {
            JavaWork javaWork=new JavaWork();
            javaWork.doTest();
        }
    }
    
    
    
    註:此時“測試工作”和“張三員工”完全耦合在一起,如若需要其它人做“測試工作”,那麽 javaWork.doTest 方法裏面的內容全部要修改,
    這時我們可以利用 IOC 的設計思路將控制權反轉,將某個人執行這種工作的控制權轉交給主管。

    .
  2. 實現功能:將控制權轉交給主管

    // Tester.java 接口
    public interface Tester {
    
        public void test();
    }
    
    // 員工1實體:ZhangSan.java 實現 Tester 接口
    public class ZhangSan implements Tester{
    
        public void test(){
            System.out.println("張三-測試程序");
        }
    }
    
    // 員工2實體:LiSi.java 同樣實現 Tester 接口
    public class Lisi implements Tester{
    
        
    public void test(){ System.out.println("李四-測試程序"); } }
    // 工作類:JavaWork.java
    public class JavaWork {
        
        private Tester tester;   //配置beans.xml 文件中的屬性時,name值要和聲明值完全對應
        
        public void setTester(Tester tester) {
            this.tester = tester;
        }
    
        public void doTest(){
            tester.test();
        }
    }
    // 主管測試類:Test.java
    public class Test {
    
        public static void main(String[] args) {
            JavaWork javaWork=new JavaWork();
            javaWork.setTester(new ZhangSan()); //只需要修改這裏的實例化對象就可選擇不同的員工來實現工作
            javaWork.doTest();
        }
    }

  3. 利用Spring 來管理

    <!-- beans.xml 配置 -->
    <bean id="zhangsan" class="com.java1234.service.ZhangSan"></bean>
    <bean id="lisi" class="com.java1234.service.Lisi"></bean>
    
    <bean id="javaWork" class="com.java1234.service.JavaWork">
        <property name="tester" ref="lisi"></property>
      <!-- 依賴註入,利用java的反射機制.設置 tester 的值引用為 lisi,其中name的值要和類裏面聲明的值完全對應 --> </bean>
    // 在2的基礎上修改:主管測試類:Test2.java
    
    public class Test2 {
    
        public static void main(String[] args) {
            ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml"); 
            JavaWork javaWork=(JavaWork)ac.getBean("javaWork");
            javaWork.doTest();
        }
    }

Spring4(2)——IOC控制反轉 (概念理解)