Spring之IOC(控制反转)入门理解

在面向对象编程中,我们经常处理处理的问题就是解耦,程序的耦合性越低表明这个程序的可读性以及可维护性越高(假如程序耦合性过高,改一处代码通常要对其他地方也要做大量修改,难以维护)。控制反转(Inversion of Control或IoC)就是常用的面向对象编程的设计原则,使用这个原则我们可以降低耦合性。其中依赖注入是控制反转最常用的实现。

举个例子:

假如现在有三个Dao实现类A, B, C,分别对应不同的操作,通常我们在业务层对其进行实例化,然后对外提供实例化后的方法。如下所示:

1 public class UserSeviceImpl implentments UserService{
2     private UserDao userDao = new  A();    //注意这里写死在代码里了,只要调用getUser,返回的就是A的getUser方法 
3    
4     public void getUser(){
5         userDao.getUser();
6     }
7 }

可以看到这时候实例化的是A类,是写死在代码里的,而如果后面我想再调用B类中的操作可怎么办呢? 没错,这种情况下就需要对业务层上面这段代码进行改动了。假如,有成千上万个Dao实现类,需求每换一次就要修改一次代码,可想而知有多痛苦。

于是就有了IOC控制反转(这里的控制,本人的理解是对对象创建的控制权)的思想,上面的代码是程序主动创建对象,控制权在程序猿手上;而控制反转后的代码应该变成程序被动接受对象,控制权在用户手上,就像下面这样。好好体会一下控制反转后的代码:

1 public class UserSeviceImpl implentments UserService{
2     private UserDao userDao;    //注意这里不再进行实例化了,而是通过提供一个set方法来完成这个工作。
3    public void setUserDao(UserDao userDao){ //利用set动态的进行对象的注入
4     this.userDao = userDao;
5    }
6 public void getUser(){ 7 userDao.getUser(); 8 } 9 }

于是使用这种方式我们在需求变化后不用再修改业务层的代码,用户直接给setUserDao传入不同Dao实现类的对象就好,使得系统的耦合性大大降低,程序猿也就可以更加专注在业务的实现上,而不用去管理对象的创建问题啦!这是IOC的原型,也是简单的入门理解。

应用到spring上,所谓的 IoC,一句话搞定:就是对象由spring来创建,管理,装配。 后续更难的再慢慢学吧~

posted @ 2021-06-29 16:55  Only、  阅读(162)  评论(0编辑  收藏  举报