0
点赞
收藏
分享

微信扫一扫

深入了解Facebook广告工具和资源,优化你的营销活动

青乌 2023-05-12 阅读 66

目录

何为Spring

1. 何为容器 

2. 何为 IoC

2.1 传统的程序开发:耦合性太高 

2.2 解决传统开发中的缺陷 

2.3 对比总结:IoC的实现思想 

3. 理解Spring IoC

4. 理解 DI

5. 总结


何为Spring

1. 何为容器 

2. 何为 IoC

2.1 传统的程序开发:耦合性太高 

在学习 Spring 之前,我们常用的创建对象的方法就是去 new一个对象。但是这种传统的方法存在一个缺陷,就是类与类之间的耦合性太高了。例如此处举个例子,"一个人读书,得先读初中,再读高中,最后才读大学,因此,如果要创建一个大学对象,就得先创建一个高中对象,创建一个高中对象,就得先创建一个初中对象"

而这个程序是写死的,它的思维模式是固定的,如果想要对这个学生进行信息的添加,就例如添加一个参数:(学生读初中时的年龄),那么代码可想而知,是要进行大调整的。要从最底层的JSH类进行修改,依次往上修改。如下所示:

因此,针对这个问题,可以做出如下优化:

2.2 解决传统开发中的缺陷 

可以尝试不在当前类中创建下级类,也就是不在University类中去创建SHS类,不在SHS类中去创建JHS类,因为这样的话,如果是参数需要变动,每一个类就需要做出调整,耦合性就太高了;

此时,我们只需要将原来由⾃⼰创建的下级类,改为传递的⽅式 (也就是注⼊的⽅式),也就是从自身类以外去获取这个对象,因为我们不需要在当前类中创建下级类了,所以下级类即使发⽣变化(创建或减少参数),当前类本身也⽆需修改任何代码,这样就完成了程序的解耦。

然后通过 Test 类来测试:

package newExample;

public class Test {
    public static void main(String[] args) {
        JHS jhs = new JHS(15);
        SHS shs = new SHS(jhs);
        University university = new University(shs);
        university.init();
    }
}

可以看出,此处的优化结果:如果是要增加或者删除参数,就不再需要大振旗鼓的去进行调整了,只需要对测试类中实例化对象的参数进行修改,以及这个类对应的属性进行修改就可以了。中间调用过程的类也就不再需要每一个都去修改了,也就大大降低了类与类之间的耦合性。

2.3 对比总结:IoC的实现思想 

此处再做出对比:

可以发现,在传统的开发中,是University类控制并创建了SHS对象,SHS类控制并创建JHS对象,而改进之后,控制权发生了反转,不再是上级对象控制下级对象了,而是下级对象把自己注入到上级对象中,下级对象的控制权不再由上级对象控制了。此时如果下级类发生了属性的变化,当前的所有类都是不受影响的,这也就是 IoC 的实现思想,控制权的反转。

3. 理解Spring IoC

这是对Spirng最核心的总结。 因此Spring是一个 IoC (控制反转)容器,所以它就具备了两个最基础的功能:

  1. 将对象(Bean)存入到容器(Spring)中;
  2. 从容器(Spring)中取出对象(Bean);

Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,(把对象的生命周期交给了 IoC容器) 它本身⼜具备了存储对象和获取对象的能⼒。 

因此 Spring IoC 带来的优点就是:

  1. 使程序之间的耦合性更低了;
  2. 使用起来更加方便,因为不再需要手动去创建对象了,也不用再去关注这个对象背后的依赖关系了;
  3. 使用起来也更加高效;

4. 理解 DI

依赖注入,指的是在IoC容器运行期间(IoC容器可以用来存取对象),动态的将依赖的某个对象注入到当前类当中的这个行为;就比如,上述例子中,要创建一个University类,需要依赖于SHS对象,那么此时就可以从 IoC容器中,将一个 SHS对象注入到当前的 University类中;

依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情。IoC是一种 "思想",而DI是一种具体的实现。通过引入 IoC容器,利用依赖注入的方式,实现对象之间的解耦。

5. 总结

Spring 是什么?如何理解 Spring? 

 IoC 和 DI 是啥?有什么区别?

Spring 最核⼼的功能是啥? 

举报

相关推荐

0 条评论