使用JAVA实现的一个简单IOC注入实例
https://blog.csdn.net/echoshinian100/article/details/77977823
欲登高而望远,勿筑台于流沙
使用JAVA实现的一个简单IOC注入实例
控制反转IOC( Inversion of Control )也被称为依赖注入,简单的说,就是通过接口来实现两个类之间的弱引用,由一个第三方容器来专门管理这种依赖,负责实例化并注入接口的实现。
由于一般都是通过构造函数注入接口的实现,因此也叫构造依赖注入。
不废话,上代码:
要求从控制台接收两个输入并分别执行三次求和,业务逻辑很简单。这里我们划分为业务逻辑层Business和调用层也就是应用层Application.
Setp1:定义接口
/**
* 定义业务方法接口
*/
public interface IAdd {
public void Add(String a,String b);
public void Add(int a,int b);
public void Add(float a,float b);
}
Setp2:具体业务类实现接口
/**
* IAdd接口的实现,具体业务类
* */
public class Bll implements IAdd { public void Add(String a, String b) {
System.out.println("现在执行字符串连接");
System.out.println(a+b);
} public void Add(int a, int b) {
System.out.println("现在执行整形求和");
System.out.println(a+b);
} public void Add(float a, float b) {
System.out.println("现在执行浮点求和");
System.out.println(a+b);
}
}
Step3:在业务类的构造函数中注入接口,使用接口的方法。此处是关键,业务类使用的接口方法,从而实现了和具体业务类的松耦合。
import java.io.BufferedReader;
import java.io.InputStreamReader; /**
* 构造依赖注入,从外部注入实现类
* 当前类为应用类
*/
public class Application { private IAdd _IAdd=null; public Application(IAdd IAdd)
{
this._IAdd=IAdd;
} public void Run()
{
float first=0,second=0; System.out.println("请输入第一个数字"); try
{
BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));
first= Cast2Float(strin.readLine());
}catch(Exception e)
{
System.out.println("您的输入有误,请输入数字,程序退出!");
return;
} System.out.println("请输入第二个数字:"); try
{
BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));
second= Cast2Float(strin.readLine());
}catch(Exception e)
{
System.out.println("您的输入有误,请输入数字,程序退出");
return;
} //调用字符串连接函数
_IAdd.Add(String.valueOf(first),String.valueOf(second)); //调用整形求和函数
_IAdd.Add((int)first,(int)second); //调用浮点求和函数
_IAdd.Add(first,second); } //对输入进行校验转换,如果转换异常抛出到上一层
private float Cast2Float(String input)throws Exception
{
if(input.length()==0){
throw new Exception();
}
return Float.parseFloat(input);
}
}
Setep4:构造第三方容器,由这个容器来负责实例化接口的实现并向应用类注入。在真实应用中,很多框架都包含这种功能,如spring mvc之类的,这类工具称为IOC容器,从而实现各个类之间的解耦。
/**
* IOC容器,为应用类Application注入业务接口实现
*/
public class IOCContainer { public static void main(String[] args)
{
//实例化IAdd接口的实现
Bll bll=new Bll();
//为应用类注入实现
Application app=new Application(bll);
//调用应用类
app.Run();
}
}
至此就完成一个简单的IOC模型。在真实的应用中,依赖控制的容器执行过程要复杂得多,需要很多运行时技术,根据不同的上下文来注入同一接口的不同实现等等。
设计模式
(一)Spring 之IOC入门简单例子
1. IOC 和 DI 是什么
2.导入Spring 的jar 包
3.实现IOC简单例子的步骤
(一)IOC 和 DI是什么
IOC即控制反转,意思是对象的创建不通过 手动 new,而是把对象的...
java 反射 模拟spring自动注入
基于反射和注解机制,简单模拟spring解析Autowired注解的过程。
1、自定义Autowired注解,代码如下
[java] view
plain copy...
深入理解IOC控制反转及应用实例
1、程序V1.0
话说,多年以前UT公司提出一个需求,要提供一个系统,其中有个功能可以在新春佳节之际给公司员工发送一封邮件。邮件中给大家以新春祝福,并告知发放一定数额的...
Spring中IoC的入门实例
2012年12月17日
72KB
下载
使用JAVA实现的一个简单IOC注入实例的更多相关文章
- Java Tread多线程(0)一个简单的多线程实例
作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39341887 本文演示,一个简单的多线程实例,并简单分析一下线程. 编程多 ...
- JAVA课程设计——一个简单的教务人事管理系统
大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...
- 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传
使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能.并且在界面上有radio 的选择内容也要上传 uploadify 插件的 下载和文档地址 ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇
本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google file system),首先整体简单介绍下该项目. [为了更好的阅读以及查看其他篇章,请查看原文:https://w ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——背景与设计篇
目录 背景 系统设计 1. 系统功能 2. Master组件 2.1 命名空间 2.2 心跳机制 2.3 故障恢复和容错机制 3. ChunkServer组件 3.1 本地存储 3.2 内存命中机制 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)
使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)
这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)
梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...
- Qt5.9一个简单的多线程实例(类QThread)(第一种方法)
Qt开启多线程,主要用到类QThread.有两种方法,第一种用一个类继承QThread,然后重新改写虚函数run().当要开启新线程时,只需要实例该类,然后调用函数start(),就可以开启一条多线程 ...
随机推荐
- ml交叉验证
https://blog.csdn.net/guanyuqiu/article/details/86006474 https://blog.csdn.net/weixin_42660173/artic ...
- 『PyTorch × TensorFlow』第十七弹_ResNet快速实现
『TensorFlow』读书笔记_ResNet_V2 对比之前的复杂版本,这次的torch实现其实简单了不少,不过这和上面的代码实现逻辑过于复杂也有关系. 一.PyTorch实现 # Author : ...
- pandas数据结构之Dataframe
Dataframe DataFrame是一个[表格型]的数据结构,可以看做是[由Series组成的字典](多个series共用同一个索引).DataFrame由按一定顺序排列的多列数据组成.设计初衷是 ...
- nio 序列化
1.序列化 public class SerializeUtils<T extends Serializable> { public byte[] serialize(T t) { byt ...
- python 三
通过程序打印中文,二进制 name="张三" for i in name: print(i) bytes_list=bytes(i,encoding='utf-8') print( ...
- Android 音视频深入 八 小视频录制(附源码下载)
本篇项目地址,求starthttps://github.com/979451341/Audio-and-video-learning-materials/tree/master/%E5%B0%8F%E ...
- 32 C++常见错误集锦
1 下列程序中,K的值为:6 enum { a,b=5,c,d=4,e }k; K=c; 分析:enum中,首元素不赋值的话,默认为0:后一个元素不赋值的话比前一个元素大1. 2 程序运行正常. # ...
- day41-python多进程多线程-多线程共享
线程共享变量多线程和多进程不同之处在于多线程本身就是可以和父进程共享内存的,这也是为什么其中一个线程挂掉以后,为什么其他线程也会死掉的道理. import threading def worker() ...
- 第三视角Beta答辩总结
第三视角Beta答辩总结 博客链接以及团队信息 组长博客链接 成员信息(按拼音排序) 姓名 学号 备注 张扬 031602345 组长 陈加伟 031602204 郭俊彦 031602213 洪泽波 ...
- n阶楼梯,一次走1,2,3步,求多少种不同走法
##已知n阶楼梯,一次可以迈1,2,3步.求所有走法## 如果要列出走法,时间复杂度太高,O(n)=2**n,前两个函数遍历走法.## 如果只是单纯列出走法数量,就简单多了,也但是很容易内存爆表. # ...