Spring4(2)——IOC控制反轉 (概念理解)
阿新 • • 發佈:2018-10-21
控制 引用 接口 java的反射機制 test 法則 imp 基礎上 ava
1.IOC控制反轉的概念
IOC(控制反轉:Inverse of Control ),又稱作 依賴註入,是一種重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的 Spring 框架的核心。
2. IOC控制反轉舉例理解
-
實現功能:一個員工(張三)完成測試工作
// 員工1實體:ZhangShang.java public class ZhangSan { public void test(){ System.out.println("張三-測試程序"); } }
// 工作類:JavaWork.java public class JavaWork {
// 主管測試類:Test.java public class Test { public static void main(String[] args) { JavaWork javaWork=new JavaWork(); javaWork.doTest(); } }
註:此時“測試工作”和“張三員工”完全耦合在一起,如若需要其它人做“測試工作”,那麽 javaWork.doTest 方法裏面的內容全部要修改, 這時我們可以利用 IOC 的設計思路將控制權反轉,將某個人執行這種工作的控制權轉交給主管。
.
-
實現功能:將控制權轉交給主管
// 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{
// 工作類: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(); } }
-
利用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控制反轉 (概念理解)