Spring5企业级开发实战(二)————SpringIoC容器原理

IoC的概念

  • Inversion of Control 的简写,翻译成汉语就是控制反转。Ioc不是一门技术,而是一种设计思想。
  • 传统的创建对象的方式是由开发人员由类NEW一个出来,而控制反转则是将类放在管理类的容器(这个容器很像生产对象的工厂,与工厂方法如出一辙)中。
  • 如果我们想用这个对象,直接在容器中拿就可以了,即把本来由开发人员控制的对象交给容器来处理,减少不必要的错误以及管理成本,这种就叫控制反转。

依赖倒置

大家还记得我在第一篇文章中讲解的设计模式六大原则么?其中有一个叫依赖倒置原则,这个的含义就是高层次的模块不应该依赖于低层次的模块,而应该依赖于抽象,IoC就是这种原理。大家如果不太理解我们举个简单的小例子:
我们就说上班这件事,当你说我要坐公交上班的时候,这个都是具体的动作,当你说我要去上班的时候,这个已经从具体抽象出来了,因为你总得用一种交通方式吧!就是这个意思。那么现在有一个需求要求某个人骑自行车去上班,这个应该怎么写?

package 依赖倒置;

/**
 * Created by select you from me on 2019-08-11 0011.
 * func 依赖倒置
 */
public class Bike {
	public String sudu="10KM/h"; //车的速度  虽然依然是自行车,这个速度会不会改变?
	public String time="30min"; //上班所需的时间   这个时间也不一定的吧?

	public Bike(){

	}
	public void go(){
		System.out.println("今天骑自行车去上班,速度是"+this.sudu+",时间:"+time);//当然,描述也会变的
	}
}
package 依赖倒置;

/**
 * Created by select you from me on 2019-08-11 0011.
 * func 依赖倒置
 */
public class Person {
	private Bike bike;//这个交通工具会不会改变?
	public Person(){
		this.bike=new Bike();
	}
	public void  go(){
		bike.go();
	}

	public static void main(String[] args){
		Person person = new Person();
		person.go();//可不可以在这里随意的切换工具呢?
	}
}

这里有几个问题,已经在代码里备注了,那么怎么改变这个问题呢?请看下边的代码:

package 依赖倒置;

/**
 * Created by Administrator on 2019-8-1 0001.
 */
public interface Movable {
	String sudu=""; //车的速度  虽然依然是自行车,这个速度会不会改变?
	String time=""; //上班所需的时间   这个时间也不一定的吧?
	void go();
}

package 依赖倒置;

/**
 * Created by Administrator on 2019-8-1 0001.
 */
public class Bike1 implements Movable {
	public String sudu="";
	public String time="";
	public Bike1(String sudu,String shijian){
		this.sudu=sudu;
		this.time=shijian;
	}
	@Override
	public void go() {
		System.out.println("今天骑自行车去上班,速度是"+this.sudu+",时间:"+this.time);//当然,描述也会变的
	}
}

package 依赖倒置;

/**
 * Created by Administrator on 2019-8-1 0001.
 */
public class Person1 {
	private Movable movable;//
	public Person1(String fangshi,String sudu,String time){
		if("bike".endsWith(fangshi))
		this.movable=new Bike1(sudu,time);
	}
	public void  go(){
		this.movable.go();
	}

	public static void main(String[] args){
		Person1 person = new Person1("bike","20km/h","30min");
		person.go();//可不可以在这里随意的切换工具呢?
	}

}

依赖注入

DI(Dependency Injection)是Spring实现IoC的一种重要手段。

那么我们来总结下:

Spring最重要的理念是控制反转,遵循了依赖倒置的软件设计原则,其中,最重要的实现方式是通过XML或者注解形式的依赖注入。


作者:select you from me
链接:https://blog.csdn.net/qq_15612527
来源:CSDN
转载请联系作者获得授权并注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值