一、IOC概述

Inverse Of Controll即为控制反转,简称IOC

简单来说,IOC反转了依赖关系的满足方式,由之前的自己创建依赖对象,变为由工厂推送。(变主动为被动,即反转)它解决了具有依赖关系的组件之间的强耦合,使得项目形态更加稳健

二、什么是IOC?

2.1 了解IOC思想

大概了解了IOC是控制反转,至于现在我们并不清楚它的思想和作用。那么问题来了,IOC(控制反转)是什么呢?

控制反转,简称IOC。顾名思义,它是由“控制”和“反转”两个词语组合而成。那么我们就顺藤摸瓜,分别分析一下这两个词语!

2.2 控制

控制一词,我们需要想的就很多。比如说,达成控制的条件必须是两个对象 ,控制可以分为谁控制谁控制你做什么 。那我们一一列举这几种情况:

  1. 在Java中我们以new的方式创建对象,开发者控制控制着开发工具并间接的控制程序创建所需要的依赖对象,对于程序来说是直接的控制创建对象;如果使用IOC呢?那就可以是IOC容器直接的控制创建对象
  2. 既然是IOC控制创建对象,那么控制创建对象是怎么控制的呢?使用IOC创建对象是需要标签引入外部对象,这说明了IOC容器控制着创建依赖对象的入口

2.3 反转

反转一词,我们想的也很多。比如说,达成反转的条件必须是两个对象有反转就有正转 ,然后就是反转了些什么 。那么我们也一一列举说明:

  1. 在Java中我们是间接的实用程序来创建对象,这可以看作正转。那有了IOC容器,一下子就变了,我们不用自己new对象,而是直接反转为由IOC创建生成依赖对象并存入IOC容器中
  2. 使用IOC容器创建对象我们只需要通过配置来告诉它需要创建的对象是什么,并标识一下以后使用什么来获取IOC容器中创建好的对象即可(配置使用IOC的过程),这时候等你想要IOC容器中对象就直接用这个唯一标识来获取就好,而获取的过程肯定是IOC通过这个唯一标识来查找并返回给我们该对象
  3. 也许有的小伙伴还是不明白反转。为什么要把IOC容器帮我们创建对象的行为叫反转呢?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象。如果不反转呢?开发者就需要创建对象,并找到、获取、使用该对象,此过程中的所有都有开发者来控制的

三、IOC的作用

通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

比如:Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。

在使用了IOC之后呢?A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(xml)来指定

既然由配置文件来指定创建对象关系,就大大降低了各个组件之间的强耦合并有利于维护,是项目变得更加稳健灵活

四、IOC解决Dao层和Service层的强耦合

在原始的Web开发中,Dao层和Service层是密不可分的。Dao层为数据访问层,只与数据库打交道。Servcie层为业务处理层,只处理实现相应的业务。而我们将Web开发中的Dao层和Service层串在一起,就需要在Service层new一个私有的Dao层实现对象(XxxDaoImpl)。有了IOC的思想,再想想传统的Dao层与Service层的实现就显得很不灵活,一旦修改了Dao层实现类,就必须将项目中的源码都修改掉,显然是一件非常可怕的事情。

五、使用IOC解决Dao层和Service层的强耦合

既然解决Dao层和Service层的强耦合那必须得这两个组件对吧。

Dao层

// Dao层接口package com.mylifes1110.dao;import com.mylifes1110.bean.User;public interface UserDao {    int insertUser(User user);}// Dao层实现类package com.mylifes1110.dao.impl;import com.mylifes1110.bean.User;import com.mylifes1110.dao.UserDao;public class UserDaoImpl implements UserDao {    @Override    public int insertUser(User user) {        System.out.println("------insertUser and UserDao------");        return 0;    }}

注意: 我们在使用IOC时,必须将Dao层实现类对象注入到IOC容器中,这必有一个注入方式来告知IOC容器创建对象和获取对象,在Service层我们并不需要new实现类对象,而是创建一个Service层的Setter方法来注入UserDaoImpl依赖到UserServcieImpl中(这里可以把它们想为拼装),此时所用的注入方式叫做Setter方法依赖注入,现在不需要纠结,后续我会将依赖注入的所有方式列举并分析依赖注入思想和依赖注入与IOC的关系。

Service层

// Service层接口package com.mylifes1110.service;import com.mylifes1110.bean.User;public interface UserService {    int insertUser(User user);}// Service层实现类package com.mylifes1110.service.impl;import com.mylifes1110.bean.User;import com.mylifes1110.dao.UserDao;import com.mylifes1110.service.UserService;public class UserServiceImpl implements UserService {    private UserDao userDao;    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    @Override    public int insertUser(User user) {        System.out.println("------insertUser and UserService------");        return userDao.insertUser(null);    }}

spring-context.xml

<?xml  version="1.0" encoding="UTF-8"?>                                    

测试类

/*** @MethodName insertUser1* @Param []* @Description 测试IOC的使用* @Author Ziph* @Date 2020/7/12*/@Testpublic void insertUser1() {    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");    UserService userService = (UserService) context.getBean("UserService");    userService.insertUser(null);    // 打印结果    ------insertUser and UserService------    ------insertUser and UserDao------}

分享

上面是本人在学习路上整理的一些比较干货的java资料,如果有需要的兄弟可以先关注我,私信我回复【资料】即可。

简述控制反转ioc_深度理解Spring IOC(控制反转)相关推荐

  1. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 在这里插入图片描述 案例 如 ...

  2. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 案例 如果按照之前javaw ...

  3. 深入理解Spring IOC和AOP

    文章目录 1. 什么是 Spring 框架? 1.1Spring简介 1.2Spring的好处 1.3Spring体系结构 2.理解Spring IoC 2.1IoC简介 2.2IoC的好处 2.3依 ...

  4. spring概念理解之IOC(控制反转)

    这是Spring中的有特点的一部份.IoC又被翻译成"控制反转",也不知道是谁翻译得这么别扭,感觉很深奥的词.其实,原理很简单,用一句通俗的话来说:就是用XML来定义生成的对象.I ...

  5. spring ioc控制反转

    一. 什么是spring,它能够做什么? Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能 ...

  6. 【Java从0到架构师】Spring - IoC 控制反转、DI 依赖注入

    IoC 控制反转.DI 依赖注入 Spring 简介 Spring 基本使用 - IoC 容器 依赖注入 (Dependency Injection) 基于 setter 的注入 - 自定义对象 be ...

  7. spring——IOC控制反转(一)

    一.spring之IOC 1. IOC(控制反转:Inverse of Control ),又称作DI依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的 Spring 框 ...

  8. 抛弃隐晦,明了的理解Spring IOC与AOP

    IOC(反转控制) 一个java应用程序是有很多类组成的,这些类相互协作.相互作用来提供应用程序的表现行为.那些被其它类组合提供某些行为的类,称之为其它类的依赖(dependencies).利用软件工 ...

  9. 5 分钟一次理解 Spring IOC !

    今天我们分析一下 spring 的 IOC,梳理一下 IOC 和 DI 的概念与原理.在网上看到开涛有篇文章写的不错,提取其中一部分精华内容并做一些解读. 1.1.IOC是什么? Ioc-Invers ...

最新文章

  1. 违反计算机网络安全如何处罚,网络信息安全知识:违反治安管理行为的处罚包括()。...
  2. 【CF526F】Pudding Monsters
  3. 设置最小值_AI基础教程62:使用文字菜单编辑文字(四)标点挤压设置
  4. SAP:2019年会有多么不一样?
  5. linux 3g 程序,ARM板和Linux上的3G配置详解
  6. 《机器学习与R语言(原书第2版)》一2.3 探索和理解数据
  7. rf框架的缺点_2017热门开源自动化测试框架优缺点对比
  8. 大学生必看的一分钟——俞洪敏语录
  9. c语言 最大子段和,最大子段和 C语言源码
  10. 如何区分1位和4位数码管引脚图
  11. 2022道路运输企业安全生产管理人员考试题及答案
  12. 2022苹果AppStore应用商店上传与APP上传流程必看(基础篇)
  13. 配置多用户连接k8s
  14. 2019日本Summer Sonic音乐节攻略(明星阵容)
  15. 索骥馆-思维训练之最佳记忆方法-王洪礼的奇象记忆思维技术与方法 》扫描版[PDF]
  16. 我的那些年~小小少年~小屁孩
  17. CEPI扩大与三叶草生物合作,资助“S-三聚体”新冠疫苗候选物全球II/III期临床研究以获上市许可
  18. 安装skywalking
  19. 北京拓保世纪:以硬技术为根本,用专业力量传递价值!
  20. 什么是软件需求,什么是功能需求?——论需求的三个层次和三个方面(2)

热门文章

  1. .NET Core SignalR Redis底板详解(前言)
  2. 前端面试知识点目录整理
  3. Hadoop(19)-MapReduce框架原理-Combiner合并
  4. webpack打包vue文件报错,但是cnpm run dev正常,最后我只想说:是我太笨,还是webpack4.4版本太坑...
  5. [转]常用OCR软件介绍
  6. iOS 应用性能测试的相关方法、工具及技巧
  7. Odoo(OpenERP)配置文件openerp-server.conf详解
  8. Angular2.0快速开始
  9. 通过结构体某个成员的地址计算结构体首地址 (转)
  10. configSections