J2EE系列之Spring4学习笔记(二)--IOC详解(介绍)

Spring的主要特性之一是控制反转(IOC).

IOC(控制反转:Inverse of Control ),又称作依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring 框架的核心。


通过实例了解下:

1.新建工程Spring402;

2.这里一主管完成测试工作为例,新建一个类ZhangSan,张三能够完成测试工作:

package com.test.service;

public class ZhangSan {

	public void test(){
		System.out.println("张三--测试程序");
	}
}
	
3.新建一个类JavaWork,完成测试工作:

package com.test.service;

public class JavaWork {

	public void doTest(){
		ZhangSan zhangsan = new ZhangSan();
		zhangsan.test();
	}
}
这里指定了张三来完成测试工作。

4.新建测试类:主管完成测试任务:

package com.test.test;


import com.test.service.JavaWork;

public class Test {

	public static void main(String[] args) {
		
		JavaWork javaWork = new JavaWork();
		javaWork.doTest();
	}
}

在这里主管新建一个完成测试任务对象,调用对象的doTest方法完成测试工作。


分析这个实例可以发现,JavaWork类与ZhangSan这个类是完全耦合在一起的。这时如果有一个新的测试员Lisi类:

package com.test.service;

public class LiSi {

	public void test(){
		System.out.println("李四--测试程序");
	}
}
	

这时如果让李四来完成测试工作,而不是让张三,那么要修改的地方就比较多了,这样会破坏程序的完整性。这时就有一种设计思路IOC,让完成工作这个类把控制权转交出来,让主管能够指定由谁去完成测试工作。

1.定义接口:测试员

package com.test.service;

public interface Tester {

	public void test();
}
2.修改ZhangSan类:

package com.test.service;

public class ZhangSan implements Tester{

	public void test(){
		System.out.println("张三--测试程序");
	}
}
	

3.修改LiSi类:

package com.test.service;

public class LiSi implements Tester{

	public void test(){
		System.out.println("李四--测试程序");
	}
}
	

4.修改完成工作类:

package com.test.service;

public class JavaWork {

	
	private Tester tester;
	
	
	
	public void setTester(Tester tester) {
		this.tester = tester;
	}



	public void doTest(){
		tester.test();
	}
}

这里是只管有个人来做测试,而不管这个人是谁。


5.修改测试函数:

package com.test.test;


import com.test.service.JavaWork;
import com.test.service.ZhangSan;

public class Test {

	public static void main(String[] args) {
		
		JavaWork javaWork = new JavaWork();
		javaWork.setTester(new ZhangSan());
		javaWork.doTest();
	}
}

这里主管可以指定有谁来完成任务了。让李四完成的时候,只需在JavaWork对象中传入LiSi类的对象即可。


现在引入Spring来完成上面的功能。Spring能够管理bean,写Spring的配置文件:

<?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.test.service.ZhangSan"></bean>
	
	<bean id="lisi" class="com.test.service.LiSi"></bean>
	
	<bean id="javawork" class="com.test.service.JavaWork">
		<property name="tester" ref="lisi"></property>
	</bean>
  
</beans>

这里分别定义了类ZhangSan、LiSi、JavaWork类的实例,定义JavaWork类的实例时使用<property>标签给这个类中的属性tester赋值,使用ref标签给属性赋值。当使用ref属性时,JavaWork类中会自动执行tester的set函数来给这个属性赋值。


6.定义新的测试函数:

package com.test.test;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.test.service.JavaWork;

public class Test2 {

	public static void main(String[] args) {
		
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		JavaWork javaWork = (JavaWork) ac.getBean("javawork");
		
		javaWork.doTest();
	}
}

这样使用Spring后,当需要更换测试人员时只需修改配置文件即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值