Spring IOC 容器详解

最近学习了一些Spring框架的知识,暂时先总结一下。

许多新手在没有引路人的情况下可能会碰到许多白痴性的问题。作为一个有些所得的菜鸟,我把一些常识性的问题再赘述一下。大神轻喷。

Spring的IOC 和 DI

IOC(控制反转) 和 DI(依赖注入)的关系就像是一个人的名字和外号。作为Spring框架的内核之一,IOC是它的名字,而DI是为了方便人们对它的理解而起

什么是IOC

为了实现代码之间的解耦而实现的一种技术。

当A类的依赖于B类时,A类在实例化时总是需要先实例化一个B类,而实例化B类的构造方法如果写在A类中,势必会增加两个类之间的耦合度 并且 让A类变得庞大而难以灵活的调用。

为了降低这样的耦合度,就有N掰的人提出了使用第三方来调控两个类之间的依赖关系。

这个第三者,把B类的实例引用传递(也称注入)给A类,这样当A类实例化的时候就不用考虑B的实例问题。这也就是所谓的依赖注入

这个第三者在Spring中就是IOC容器

代码实例

下面仅通过一个实例来简述下一依赖注入的概念。

我们的高数老师叫刘小峰,今天他给我们上课,我就简单写成代码

/*
刘小峰的类
*/
public class LiuXiaoFeng{

    public LiuXiaoFeng(){}

    public void say(){
        System.out.println("大家好,我是你们的高数老师刘小峰");
    }
}
/*
高数课的类
*/
public class Math{

    public void MathClass(){
        LiuXiaoFeng liu = new LiuXiaoFeng();
        liu.say();
    }
}

OK,这样我们上课只需要实例化一个Math类,调用MathClass方法就可以了。

但是我们发现一个问题,如果刘小峰老师生病了怎么办,这堂课显然就上不成了。对我们来说是喜闻乐见的,但是刘老师是个负责人的人,他找了个代课的其他老师。

如果更换老师的话,以上的上课方法就不能再用了

我们希望课堂类能够和老师无关,无论是哪个老师来,我们都把这节高数课上下去。

我们新建一个老师接口。

然后新建个代课老师类继承老师接口

public Interface Teacher{
    public void say();
}

public class OtherTeacher implements Teacher{
    public void say(){
        System.out.println("大家好,我是你们的代课老师");
    }
}

重写高数课类


public class Math{
    private Teacher teacher;
    public Math(Teacher teac){
        this.teacher = teac;
    }
    public void MathClass(){
        teacher.say();
    }
}

这样的课堂类 又 依赖于Teacher接口和OtherTeacher类了,并没有达到我们想要的上课效果,这是因为还没有引入第三者的缘故。

下面我们引入第三者 教务处!

public class Office{
    public void GoMath(){
        Teacher teacher = new OtherTeacher();
        Math math = new Math(teacher);
        math.MathClass();
    }
}

以上就是简单的依赖注入应用,我们通过教务处将老师分配给课堂,这样课堂并不会关心是哪个老师来上的这门课,我们也就能顺利的上完一堂高数课了。

UML图示

Spring IOC 容器详解_第1张图片

你可能感兴趣的:(JavaEE框架,spring,ioc,框架,内核)