SSM-Spring-SpringIoc概述
主动创建对象
模拟:获取果汁方式,自己弄需要橙子,水,糖这些原料,还需要搅拌机所以创建以下两个对象
//Blender 搅拌机
public class Blender{
public String mix(String water,String fruit,String sugar){
String juice="果汁液体由:"+water+"水果:"+fruit+"糖量:"+sugar+"组成";
return juice;
}
}
//JuiceMaker:橙汁生成器
public class JuiceMaker{
//搅拌机
private Blender blender=null;
private String water;//水描述
private String fruit;//水果
private String sugar;//糖量
//生成果汁
public String makeJuice(){
blender=new Blender();
return blender.mix(water,fruit,sugar);
}
}
这种主动创建的方式,需要我们实现不熟悉的流程,这种关系也需要我们自己维护
在这种模式下,一个复杂系统面对成千上万种情况,如果需要这样子维护,会十分复杂。
被动创建对象
提供一个果汁制造器,只需要对其进行描述就可以得到果汁,饮料店提供一个Source的描述类:
//果汁制造器
public class JuiceMaker2{
private String beverageShop=null;
private Source source;
//get and set...
public String makeJuice(){
String juice="果汁液体由:"+beverageShop+"饮品店提供:"+source.getSize()+source.getSugar+source.getFruit();
return juice;
}
}
//描述类
public class Source{
private int size;
private String sugar;
private String fruit;
//set and get...
}
这时候不需要关注果汁是如何制作的,系统采用XML对这个类进行描述
<bean id="source" class="com.ssm.spring.Source">
<property name="fruit" value="橙汁" />
<property name="sugar" value="少糖" />
<property name="size" value="大杯" />
</bean>
对果汁描述后,还需要选择饮料店,描述如下:
<bean id="juiceMaker2" class="com.ssm.spring.juiceMaker2">
<property name="beverageShop" value="贡茶" />
</bean>
这里设置饮品店设置了贡茶,这样就指定了贡茶为我们服务,而订单会引用我们之前的定义,代码如下:
JuiceMaker2 juiceMaker2=ctx.getBean("juiceMaker2");
String juice=juiceMaker2.makeJuice();
这样就不需要关心制作过程,只需要关系果汁描述and选店。
Spring IOC 阐述
控制反转是一种通过描述(在java中可以是XML或者注解)并通过第三方去产生或获取特定对象的方式。最大好处在于降低对象之间的耦合程度,对象的产生依靠IOC容器,不需要开发者主动创建。
扫描二维码关注公众号,回复:
13118614 查看本文章

主动创建,责任归功于开发者,而被动创建模式,责任归于IoC容器