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(){
/*ZhangSan zhangsan=new ZhangSan();
zhangsan.test();*/
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>