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两天的内容,真的很有 ...
随机推荐
- 微信小程序云开发使用Typescript
1.首先参考陈希章@中国在微信小程序开发中使用Typescript中的内容了解相关的内容 2.按以下步聚进行设置 1)确认本机环境已安装npm.通过在安装目录下输入 npm --v 如返回具体的版本, ...
- 力扣51. N 皇后(回溯法)
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 n ,返回 ...
- 02 流程控制之while循环
# 1.循环的语法与基本使用'''print(1)while 条件: 代码1 代码2 代码3print(3)''' # count=0# while count < 5: # 5 < 5# ...
- Twig
{{ dump() }}{{ dump(variable_name) }}List available variables (at top level): {{ dump(_context|keys) ...
- RecyclerView setHasFixedSize(true)
RecyclerView setHasFixedSize(true)当recycleview大小高宽不变的时候使用这个,可以提升效率
- MacOS系统下selenium之火狐浏览器驱动firefoxdriver安装
https://blog.csdn.net/weixin_44107321/article/details/106452468
- echarts——横向柱状堆叠图
var data = { data: [[320], [120], [220], [150]], legend: ['华为', '中兴', '烽火', '瑞斯'], } var option; var ...
- 离线谷歌地图API的开发笔记(二)
一.地图引擎介绍 离线地图引擎运行在WINDOWS平台上,底层由Visual c++语言开发,编译为OCX插件方式.占用文件少,便于二次开发的快速安装部署. 具有专业地图的基础操作功能:地图放大.缩小 ...
- python中如何获取主机的ip和主机名
使用python中的socket库,可以轻松获取主机ip和主机名. 一.获取主机名 import socket hostname = socket.gethostname() print(hostna ...
- MySQL之校对集问题
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...