IOC(控制反轉:Inverse of Control ),又稱作 依賴注入,是一種重要的面向對象程式設計的法則來削減計算機程
序的耦合問題。
執行個體分析如下:
兩個類:ZhangSan.java和Lisi.java
package com.java1234.service;
public class ZhangSan implements Tester{
public void test(){
System.out.println("張三幹活");
}
}
package com.java1234.service;
public class Lisi implements Tester{
public void test(){
System.out.println("李四幹活");
}
}
JavaWork類
package com.java1234.service;
public class JavaWork {
public void doTest(){
Lisi lisi=new LiSi();
lisi.test();
}
}
Test類
package com.java1234.test;
import com.java1234.service.JavaWork;
import com.java1234.service.Lisi;
public class Test {
public static void main(String[] args) {
javaWork.doTest();
}
}
//現在是張三和李四兩個類和JavaWork類耦合度太高,由JavaWork控制張三和李四
使用控制反轉,把控制張三和李四的權從JavaWork.java變成Test.java
JavaWork.java
package com.java1234.service;
public class JavaWork {
private Tester tester;
public void setTester(Tester tester) {
this.tester = tester;
}
public void doTest(){
tester.test();
}
}
beans.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 id="zhangsan" class="com.java1234.service.ZhangSan"></bean>
<bean id="lisi" class="com.java1234.service.Lisi"></bean>
//spring會把JavaWork中的屬性tester的值通過set方法設定為lisi (依賴注入)
<bean id="javaWork" class="com.java1234.service.JavaWork">
<property name="tester" ref="lisi"></property>
</bean>
</beans>