目录
1,简介;
IOC(控制反转:Inverse of Control ),又称作依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的 Spring 框架的核心。
下面用实例讲一下,什么叫控制反转。
我们定义一个ZhangSan类:
package com.java.service;
public class ZhangSan{
public void test(){
System.out.println("张三-测试员");
}
}
再定义一个JavaWork类,包含Zhangsan类:
package com.java.service;
public class JavaWork {
public void dopost(){
ZhangSan zs=new ZhangSan();
zs.test();
}
}
最后测试类:
package com.java.test;
import com.java.service.JavaWork;
public class Test {
/**
* 总业务执行
* @param args
*/
public static void main(String[] args) {
JavaWork jw=new JavaWork();
jw.dopost();
}
}
运行结果:
这是一个简单的类调用方法,但是这个JavaWork和人ZhangSan是完全耦合在一起的;
如果说我还有另外一个人也要参加测试,那么只能在JavaWork里面进行再次修改代码;
另外建立一个lisi类;
package com.java.service;
public class LiSi{
public void test(){
System.out.println("李四-测试员");
}
}
当要lisi做测试时,只能在JavaWork里面继续进行修改代码:
package com.java.service;
public class JavaWork {
public void dopost(){
LiSi ls=new LiSi();
ls.test();
}
}
测试类代码不变:
package com.java.test;
import com.java.service.JavaWork;
public class Test {
/**
* 总业务执行
* @param args
*/
public static void main(String[] args) {
JavaWork jw=new JavaWork();
jw.dopost();
}
}
结果:
分析一下,这样修改会改变很多代码,执行效率不高;
我们怎么样能修改一下这种实现的方式,让代码效率更高呢?
我们先来定义一个接口:
package com.java.service;
public interface Tester {
public void test();
}
并且让所有参与测试的人员都实现这个接口:
package com.java.service;
public class ZhangSan implements Tester{
public void test(){
System.out.println("张三-测试员");
}
}
在JavaWork里面定义一个测试对象tester;
package com.java.service;
public class JavaWork {
private Tester tester;
public void setTester(Tester tester) {
this.tester = tester;
}
public void dopost(){
tester.test();
}
}
这样我们在最终的测试类里面,把张三这个对象传入进去;
package com.java.test;
import com.java.service.JavaWork;
import com.java.service.ZhangSan;
public class Test {
/**
* 总业务执行
* @param args
*/
public static void main(String[] args) {
JavaWork jw=new JavaWork();
jw.setTester(new ZhangSan());
jw.dopost();
}
}
运行结果:
这样就实现了控制反转!
控制权在我们自己传入的对象里面,也就是在自己手里
2,使用Spring如何管理bean;
我们先在bean.xml配置文件里面写几个bean;
<?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.java.service.ZhangSan"></bean>
<bean id="lisi" class="com.java.service.LiSi"></bean>
<bean id="javaWork" class="com.java.service.JavaWork">
<property name="tester" ref="zhangSan"></property>
</bean>
</beans>
另外的测试类:
注意这里的bean里面的id就是bean.xml配置文件的javaWork
package com.java.test;
import com.java.service.JavaWork;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test2 {
public static void main(String[] args) {
//加载beans.xml配置文件
ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
//通过id来获取bean
JavaWork javawork=(JavaWork) ac.getBean("javaWork");
//执行方法
javawork.dopost();
}
}
运行结果:
如果想换成李四测试,那么直接修改bean.xml里面的ref值就可以了,简单方便!
欢迎关注我的微信公众号《程序员的时光》,感激不尽!