Spring之IOC(控制反转)入门理解
2024-09-22 15:05:25
在面向对象编程中,我们经常处理处理的问题就是解耦,程序的耦合性越低表明这个程序的可读性以及可维护性越高(假如程序耦合性过高,改一处代码通常要对其他地方也要做大量修改,难以维护)。控制反转(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来创建,管理,装配。 后续更难的再慢慢学吧~
最新文章
- ASP.NET Core中的依赖注入(1):控制反转(IoC)
- CentOS 6.7 如何启用中文输入法
- 利用stack结构,将中缀表达式转换为后缀表达式并求值的算法实现
- shell之数值运算
- 『随笔』C# 程序 修改 ConfigurationManager 后,不重启 刷新配置
- C里面的类型字节长度和范围
- SimpleUrlHandlerMapping 使用
- B树叶子节点split
- Cookies与保持登录(新浪微博的简单模拟登录)
- 说说Android应用的persistent属性
- jmeter接口测试实践
- Junit4学习(一)新建Junit4工程
- Class StatusesTableSeeder does not exist 如何解决
- Windows同时安装Python2、Python3兼容运行
- 01-Python的介绍_Python编程之路
- golang项目中使用条件编译
- 返回 字符串的 form和js组合让页面跳转
- array_merge() 用法
- 12.C# 接口和抽象类的区别
- const和volatile分析