您的位置:首页 > 编程语言 > Java开发

Spring(三)IoC的简介和实例分析

2017-04-05 19:33 183 查看
1.Spring中IoC的简介

IoC(控制反转:Inverse of Control )

又称作依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring 框架的核心.

2.不使用Spring的实例概要

1)编写 人的java类

2)编写 工作的java类

3)编写 测试的java类 ,该项工作是由那个人来负责



3.不使用Spring的实例分析

人的java类

/**
* 人物类
* 张三 负责测试
* @author 49882
*
*/
public class ZhangSan {

//张三 会的工作
public void doWork(){
System.out.println("张三负责测试");

}
}


工作的java类

/**
* 工作类
* @author 49882
*
*/
public class Work {

public void doTest(){
//对象 张三做测试
ZhangSan zhangSan =new ZhangSan();
zhangSan.doWork();
}
}


测试的java类

import com.hlf.service.Work;

/**
* 测试工作类 例子
* @author 49882
*
*/
public class testWork {

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


执行结果



3.不使用Spring的实例下载

实例下载https://pan.baidu.com/s/1hsOJNyk

ps:使用这种方式的缺点就是工作和人的耦合性很高,当在工作中需要对人进行修改的
4000
时候,就要修改工作的代码,不利于开发。所以就有了控制反转IoC的思想,将控制权转交出来。

4.采用控制反转的实例概要

1) 接口类

2)编写 人的java类 实现接口

3)编写 工作类,由多态实现

4)编写 测试的java类 ,具体工作是由哪一个测试人负责由传入的人决定,解除了工作业务中和设置人员的耦合性



5.采用控制反转的实例分析

测试的接口

/**
* 测试的接口
* @author 49882
*
*/
public interface Tester {
public void doWork();
}


具体人的java类,这里需要实现接口Tester

/**
* 人物类
* 李四 负责测试
* @author 49882
*
*/
public class LiSi implements Tester{

//李四 会的工作
public void doWork(){
System.out.println("李四负责测试");

}
}


现在只需要用接口对象调用方法就可以了,这里需要穿入人的对象,然后再决定调用相应的方法,应用了java的多态的特性

package com.hlf.service;
/**
* 工作类
* @author 49882
*
*/
public class Work {

Tester tester;
//设置测试员
public void setTester(Tester tester) {
this.tester = tester;
}

public void doTest(){
/*//对象 张三做测试
ZhangSan zhangSan =new ZhangSan();
zhangSan.doWork();*/

//现在只需要用接口对象调用方法就可以了
tester.doWork();
}
}


测试工作的例子,例子1 设置做该工作的人员是实例化的LiSi

/**
* 测试工作类 例子
* @author 49882
*
*/
public class testWork {

public static void main(String[] args) {
Work work=new Work();
//      work.setTester(new ZhangSan());
work.setTester(new LiSi());
work.doTest();
}
}


结果如下:



当如果传递的是张三对象的时候,会调用张三的动作去执行工作



6.采用控制反转的实例下载

实例下载 https://pan.baidu.com/s/1hsOJNyk

ps:使用这种方式的优点就是耦合性低,所以我们接下来可以使用Spring容器管理bean,实现IoC.

7.Spring框架的使用来实现控制反转概要

1) Spring jar包

2)最高层的接口类

3)编写 两个人的java类 实现接口

4)编写 工作类,由多态实现 和之前的都一样

5)配置文件xml,包括实例化信息和设置属性的信息

6)编写 测试的java类 ,这里就能直接通过修改xml文件来确定到底传入的具体的人的对象是谁,就执行谁的方法



8.Spring框架的使用来实现控制反转实例分析

最高层的接口类 ,和上面的一个例子一样

package com.hlf.service;
/** * 测试的接口 * @author 49882 * */ public interface Tester { public void doWork(); }


两个人的java类 实现接口

/**
* 人物类
* 张三 负责测试
* @author 49882
*
*/
public class ZhangSan implements Tester{

//张三 会的工作
public void doWork(){
System.out.println("张三负责测试");

}
}


/**
* 人物类
* 李四 负责测试
* @author 49882
*
*/
public class LiSi implements Tester{

//李四 会的工作
public void doWork(){
System.out.println("李四负责测试");

}
}


工作类,由多态实现 和之前的都一样

/**
* 工作类
* @author 49882
*
*/
public class Work {

Tester tester;
//设置测试员
public void setTester(Tester tester) {
this.tester = tester;
}

public void doTest(){

//现在只需要用接口对象调用方法就可以了
tester.doWork();
}
}


配置文件xml,包括实例化信息和设置属性的信息

本来属性中是没有值的,通过ref注入了一个对象,就是依赖注入。



编写 测试的java类

/**
* 测试工作类 例子
* @author 49882
*
*/
public class testWork {

public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("Spring.xml");
Work work=(Work) context.getBean("work");
work.doTest();
}
}


如果xml文件中,如上图tester实例化的是lisi,那么最后调用的就是李四的工作,由他完成工作;如果xml中tester实例化的是shangsan,那么最后调用的就是张三的方法。只需要修改xml文件即可。

9.Spring框架的使用来实现控制反转实例下载

实例下载 https://pan.baidu.com/s/1hsOJNyk
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: