SSM-Spring-Springioc概述

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);
    }
    
}

这种主动创建的方式,需要我们实现不熟悉的流程,这种关系也需要我们自己维护

SSM-Spring-Springioc概述_第1张图片

在这种模式下,一个复杂系统面对成千上万种情况,如果需要这样子维护,会十分复杂。


被动创建对象

提供一个果汁制造器,只需要对其进行描述就可以得到果汁,饮料店提供一个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选店。

SSM-Spring-Springioc概述_第2张图片


Spring IOC 阐述

​ 控制反转是一种通过描述(在java中可以是XML或者注解)并通过第三方去产生或获取特定对象的方式。最大好处在于降低对象之间的耦合程度,对象的产生依靠IOC容器,不需要开发者主动创建。

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

你可能感兴趣的:(SSM学习)