控制反转(Inversion of Control,缩写为IoC)
如果程序写死,那么用户每提出一个新的要求,程序员都需要修改源代码。
比如,现在有教师类Teacher和学生类Student
那么,用户要获取教师时候,伪代码为
public class UserServiceImpl implements UserService{ private UserDao userDao = new Teacher(); public void getUser() { userDao.getUser(); } }
如果现在要获取学生,就需要更改源代码
public class UserServiceImpl implements UserService{ private UserDao userDao = new Student(); public void getUser() { userDao.getUser(); } }
很不方便,于是,改变写法
public class UserServiceImpl implements UserService{ private UserDao userDao;
//利用set方法实现值的动态注入 public setUserDao(UserDao userDao){ this.userDao = uerDao; } public void getUser() { userDao.getUser(); } }
在用户调用的时候
UserService userService = new UserServiceImpl(); userService.setUserDao(new Teacher()); //serService.setUserDao(new Student()); userService.getUser();
在这之前,程序员需要主动创建对象,控制权在程序员手上,如:
private UserDao userDao = new Student();
用了set之后,程序员不需要主动创建对象,而是程序被动的接收对象,如:
userService.setUserDao(new Teacher());
在这个过程中,控制权发生了转变,既实现了控制反转
之前的主动权在于业务层,程序员选择调用什么
更改代码之后的主动权在于用户,用户选择调用什么
控制反转定义:
控制反转是一种通过描述(XML或注解)并通过第三方生产或者获取特定对象的方式,在Spring中实现控制反转的是IoC容器,其实现方式是依赖注入(DI)
原文:https://www.cnblogs.com/tudoo/p/12549572.html