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来创建,管理,装配。 后续更难的再慢慢学吧~
Spring之IOC(控制反转)入门理解的更多相关文章
- Spring-初识Spring框架-IOC控制反转(DI依赖注入)
---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...
- Spring 01: Spring配置 + IOC控制反转 + Setter注入
简介 Spring框架是一个容器,是整合其他框架的框架 他的核心是IOC(控制反转)和AOP(面向切面编程),由20多个模块构成,在很多领域都提供了优秀的问题解决方案 特点 轻量级:由20多个模块构成 ...
- 三大框架 之 Spring(IOC控制反转、DI依赖注入)
目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...
- Spring的IOC控制反转和依赖注入-重点-spring核心之一
IoC:Inverse of Control(控制反转): 读作"反转控制",更好理解,不是什么技术,而是一种设计思想,好比于MVC.就是将原本在程序中手动创建对象的控制权,交由S ...
- Spring 04: IOC控制反转 + DI依赖注入
Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...
- [转]Java Spring的Ioc控制反转Java反射原理
转自:http://www.kokojia.com/article/12598.html 学习一个东西的时候,如果想弄明白,最好想想框架内部是如何实现的,如果是我做我会怎么实现.下面我就写一个Ioc ...
- Spring之IOC/DI(反转控制/依赖注入)_入门Demo
在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new ob ...
- 轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI) 依赖注入和控制反转的理解,写的太好了。
轻松学,浅析依赖倒置(DIP).控制反转(IOC)和依赖注入(DI) 2017年07月13日 22:04:39 frank909 阅读数:14269更多 所属专栏: Java 反射基础知识与实战 ...
- 回顾Spirng ioc 控制反转
Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的.结合网上对Spring Ioc的理解,回顾一下自 ...
- BeanFactory和IOC控制反转
之前在看spring,看IOC实在是云里雾里,包括看AOP也是云里雾里的,后来重新学习Java Web,做了一个简单的web项目,再之后看了崔希凡老师的视频,Day27和Day28两天的内容,真的很有 ...
随机推荐
- 无需联网,一键永久激活所有Windows/Office
对于 Windows 激活工具,大家可能了解不多,熟悉的比如小马激活工具,因为激活工具从来都是病毒高发区,各种工具混在一起,一不小心,电脑就中招了. 今天介绍一款不一样的. R@1n ReBirth ...
- 搭建ubuntu开发环境
tar -xzvf VMwareTools-10.0.6-3595377.tar.gz cd vmware-tools-distrib 再执行:sudo ./vmware-install.pl ...
- ubuntu usb network card drive
通过 lsusb -t命令查看网卡型号 /: Bus 02.Port 1: Dev 1, class="root_hub", Driver=xhci_hcd/4p, 5000M | ...
- YOLO v6:一个硬件友好的目标检测算法
本文来自公众号"AI大道理" YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用. YOLOv6支持模型训练.推理及多平台部署等全链条的工业应用需求,并在 ...
- 【翻译】了解Flink-数据管道和ETL -- Learn Flink - Data Pipelines & ETL
目录 无状态转换 map() flatmap() keyed 流 keyBy() keys计算 keyed流上的聚合 (Implicit)状态 reduce() 和其他聚合器 有状态的Transfor ...
- 第14章 Windows管理规范
第14章 Windows管理规范 我们一直期望但是又害怕写这一章.Windows管理规范(Windows Management Instrumentation,WMI)可能是微软提供给管理员使用最优秀 ...
- ComPiler200003:Story-Oriented Programming
Story-Oriented Programming MAY 25TH, 2018 http://www.brandonkeown.com/2018/05/story-oriented-program ...
- 手写简单call、apply、bind
1.call ~function(){ function call_1(context, ...args){ context = context == undefined ? window : con ...
- 肖sir__网页线下面试
第一题: 设计一下两个两位数相加的测试用例,说只能写数字不要写文字 第二题 淘宝订单怎么测试 功能测试: 1.测试订单输入的类型 2.测试金额数量:可创建等价类划分 3.测试库存数量变更 4.测试订单 ...
- 为什么JAVA中(byte)128结果为-128;(byte)-129结果为127
为什么JAVA中(byte)128结果为-128;(byte)-129结果为127 在JAVA中默认的整型为int型,int型占4个字节,为32位.byte占一个字节为8位. JAVA中的二进制都是采 ...