Ioc的来由与Ioc基本概念

  • 传统的对象创建
  • Ioc的对象创建本质
  • Ioc的概念
  • 通过Ioc生产和获取对象

传统的对象创建

public class UserServiceImpl implements UserService {private UserDao userDao = new UserMysqlDaoImpl();@Overridepublic void getUser() {userDao.getUser();}
}

存在的问题:
当接口调用者想要改变成通过Oracle去执行数据查询时,我们程序员需要改变业务层代码,即:

public class UserServiceImpl implements UserService {private UserDao userDao = new UserOracleDaoImpl();@Overridepublic void getUser() {userDao.getUser();}
}

这样就会造成我们程序员需要根据不同的接口调用者想要使用的查询方式去修改业务层代码,每次变动 , 都需要修改大量代码 . 这种设计的耦合性太高, 牵一发而动全身。此时对象的创建权在我们程序员手中

Ioc的对象创建本质

public class UserServiceImpl implements UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void getUser() {userDao.getUser();}
}

解决的问题:
现在把创建对象主动权交给了调用者 . 程序不用去管怎么创建,怎么实现 。 它只负责提供一个对外公开的setUserDao接口去给调用者选择创建想要的对象类型。

这种思想 , 从本质上解决了问题 , 我们程序员不再去管理对象的创建了 , 更多的去关注业务的实现 . 耦合性大大降低 . 这也就是IOC的原型 !

Ioc的概念

控制反转IoC,是一种设计思想,DI(依赖注入)是实现IoC的一种方法。没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给spring容器。

IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。

Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象。

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

通过Ioc生产和获取对象

public class UserServiceImpl implements UserService {private String name;private UserDao userDao;public String getName() {return name;}// 利用set进行动态实现值的注入public void setName(String name) {this.name = name;}public UserDao getUserDao() {return userDao;}// 利用set进行动态实现值的注入public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic String toString() {return "UserServiceImpl{" +"name='" + name + '\'' +'}';}public void getUser() {userDao.getUser();}
}

bean配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--使用Spring来创建对象,在spring这些都称为bean类型 变量名 = new 类型();User user = new User();在bean中对应传统对象创建:id = 变量名class = new 的对象property 相当于给对象中的属性设置一个值ref:引用Spring容器中创建好的对象value:具体的值,基本数据类型--><bean id="userDaoImpl" class="com.dao.impl.UserDaoImpl"/><bean id="userMysqlDaoImpl" class="com.dao.impl.UserMysqlDaoImpl"/><bean id="userServiceImpl" class="com.service.impl.UserServiceImpl"><property name="name" value="zhangsan"/><property name="userDao" ref="userMysqlDaoImpl"/></bean></beans>

测试:

public class myTest {public static void main(String[] args) {// 获取ApplicationContext,拿到Spring的容器ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");// 获取具体的beanUserService userService = (UserServiceImpl)context.getBean("userServiceImpl");userService.getUser();System.out.println(userService.toString());}
}

输出:

mysql查询方式
UserServiceImpl{name='zhangsan'}

控制: 谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建,使用spring后,对象是由spring来创建
反转: 程序本身不创建对象,而变成被动接收对象
依赖注入: 就是利用set方法来进行注入

IOC是一种编程思想,由主动的编程变成被动的接收。

现在程序中不用再改动, 要实现不同的操作 , 只需要在xml配置文件中进行修改 , 所谓的IoC: 对象由Spring 来创建 , 管理 , 装配 !

Ioc的来由与Ioc基本概念及Ioc使用实现相关推荐

  1. 马哥教育第二十四ftp协议、vsftpd的高级应用、rpc概念及nfs的基本应用、samba及其基本应用...

    1.ftp协议及vsftpd的基本应用          文件共享服务:                  工作在应用层:ftp(file transfer protocol)             ...

  2. 2-RabbitMQ核心概念及AMQP协议

    RabbitMQ核心概念及AMQP协议 [root@Centos ~]# rabbitmq-plugins list Configured: E = explicitly enabled; e = i ...

  3. AUTOSAR从入门到精通100讲(四十九)-AUTOSAR 通信服务Dcm篇-Dcm概念及DSL详解与实战案例

    Dcm概念及DSL详解 正文 1. Introduction and functional overview 诊断通信管理(Diagnostic Communication Manager, DCM) ...

  4. Postman接口测试工具学习笔记(一)接口测试概念及Postman入门

    (下文照搬@Storm啊老师博文,留下记录为了方便学习和理解.大家可以去看看原文地址:https://blog.csdn.net/duzilonglove/article/details/786454 ...

  5. (HarmonyOS)JS FA调用Java PA(一)Ability概念及Ability与Internal Ability调用方式

    JS FA调用Java PA(一)Ability概念及Ability与Internal Ability调用方式 引言 Ability FA-Page Ability PA-Service Abilit ...

  6. 云计算概念及Linux系统详解

    云计算概念及linux系统详解 先来看一下维基百科上的定义: 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问,进入可配置的网络.服务器.存储.应用软件.服务等能够被快速提供 ...

  7. IOC的概念和原理:什么是IOC?、IOC的底层原理、图示、IOC接口介绍

    文章目录 1. 什么是IOC? 2. IOC的底层原理 3. 图示 4. IOC接口介绍 1. 什么是IOC? 控制反转:把对象的创建和对象之间的调用过程,从程序员手里转交给Spring进行管理. 使 ...

  8. 磁盘IOPS概念及IOPS的计算与测试

    磁盘IOPS概念及IOPS的计算与测试 http://ce.sysu.edu.cn/hope/Item.aspx?id=12630 echo "The SYSTEM Metric of th ...

  9. java中ioc作用_Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [Spring中 ...

最新文章

  1. 服务器论坛有哪些_SEO工作中,经常使用的无效外链有哪些?
  2. python输入程序_Python 程序设计中的输入与输出介绍
  3. 2021年云南高考查询成绩时间,2021年云南高考成绩排名及成绩公布时间 什么时候出来...
  4. 8.5 趣味游戏(2)
  5. linux显卡驱动版本最好,Linux 用户如何安装 Nvidia 331.67 显卡驱动稳定版本
  6. 百度启用Baidu.co.jp域名,有利于其在日本推广
  7. Spring @Configuration
  8. 创建界面_《魔兽世界》智慧烈风buff延长 9.0版本角色创建界面改动
  9. python爬虫什么意思-Python为什么叫爬虫?Python与爬虫有什么关系?
  10. 在Linux的Terminal中显示文本文件特定行的内容
  11. 解决SAP PI Cluster系统故障
  12. matlab opencv模板匹配算法,OpenCV模板匹配函数matchTemplate详解
  13. vue 路由守卫的使用
  14. 故障树手册(Fault Tree handbook)(6)
  15. Android运行报错:Error: Static interface methods are only supported starting with Android N
  16. 使用jinja2自动生成交换机接口配置脚本
  17. ROCKET PROPULSION ELEMENTS——DEFINITIONS AND FUNDAMENTALS笔记
  18. 钢筋符号!每天学一点,进步惊人!收藏不会错!
  19. 推荐给大家一款免费的跨境电商免费选品软件
  20. 心理健康情绪管理主题PPT模板

热门文章

  1. linux 查看系统性能总结
  2. 华为鲲鹏认证openeuler系统忘记root密码时如何破解root密码
  3. 弘辽科技:淘宝品牌混淆会被扣分吗?
  4. 屏蔽系统分区默认共享及关闭smb服务
  5. sublime text2 光标由短横线切换成竖线
  6. Java四舍五入及保留小数点位数
  7. 面对诱惑,我才知道自己有多脆弱
  8. Building JavaScript Games for Phones Tablets and Desktop(1)-程序设计
  9. 分数线计算机怎么打,分数线怎么打
  10. 用NuGet管理好你的包包