最近学习了一些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();
}
}
以上就是简单的依赖注入应用,我们通过教务处将老师分配给课堂,这样课堂并不会关心是哪个老师来上的这门课,我们也就能顺利的上完一堂高数课了。