博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用JAVA实现的一个简单IOC注入实例

Posted on 2018-06-15 16:55  ☆Keep★Moving☆  阅读(1138)  评论(0编辑  收藏  举报

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的入门实例

2012年12月17日 72KB 下载