当前位置: 首页 > news >正文

ioc(di) 前世今生

ioc inversion of control 控制反转

学习hibernate时第一次接触到这个概念 在hibernate中常用于一对多和多对多关系映射中 inverse=true时表示自身不维护两表之间关系,而由对方维护,常用于数据库crub的优化

 

学习spring时再次接触这个概念 ioc前身就是工厂模式 factory 

 

那么何为工厂模式?

老板要获取一件产品,但是自己不想亲自去做(解耦合),交给专门的工人去做,老板要做的就是直接获取成品,从哪获取,从工厂获取 Factory.getxxx()

工厂会提供一个接口,

工人们按照接口标准,制造产品(继承接口方法,实例化对象)  返回给工厂定义的静态方法  这个工作在BeanFactory有spring工厂自动完成

 

dao.getUserDao() 

public static UserDao getUserDao() {
/**
* 给出一个配置文件,文件中给出UserDao接口的实现类名称!
* 我们这个方法,获取实现类的类名,通过反射完成创建对象!
*/
/*
* 得到dao实现类的名称
*/
String daoClassName = props.getProperty("cn.itcast.usermng.dao.UserDao");

/*
* 通过反射来创建实现类的对象 
*/
try {
Class clazz = Class.forName(daoClassName);
return (UserDao)clazz.newInstance();
} catch(Exception e) {
throw new RuntimeException(e);
}
}

  

IOC 控制反转 在这里也叫依赖注入DI  

老板不在从工厂中获取需要的产品,而是放一个篮子()定义一个接口) 放在家门口,工厂(容器Container getUserDao)生产好了的商品自动装配到接口

 

从Dao dao=factory.getUserDao()---->Dao dao=null;dao接口由容器自动装配 

 

 

单例 singleton  容器创建时初始化bean 且只创建一个

原型 prototype 容器初始化时不创建bean对象实例化时创建 可创建多个

 

转载于:https://www.cnblogs.com/lt123/p/7341902.html

相关文章:

  • 类A是公共的,应在名为A.java的文件中声明错误
  • Oracle约束的状态及验证机制
  • jsp 静态包含 和 动态包含
  • 整合ssh的时候出现空指针java.lang.NullPointerException
  • Android -- 自定义view实现keep欢迎页倒计时效果
  • mysql 100%占用的解决
  • 天天爱跑步NOIP
  • 白话经典之String字符串详解
  • C++ STL疑惑知识点
  • Python基础
  • 理解浏览器关键的渲染路径
  • Android RecyclerView 水平滚动+自动循环轮播
  • GBDT和随机森林的区别
  • C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
  • 在客户端先通过JS验证后再将表单提交到服务器
  • 78. Subsets
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • git 常用命令
  • JavaScript创建对象的四种方式
  • JavaScript的使用你知道几种?(上)
  • JavaScript对象详解
  • Java反射-动态类加载和重新加载
  • leetcode-27. Remove Element
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • mockjs让前端开发独立于后端
  • Odoo domain写法及运用
  • PhantomJS 安装
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • uni-app项目数字滚动
  • Vue 2.3、2.4 知识点小结
  • vue 配置sass、scss全局变量
  • Vue.js 移动端适配之 vw 解决方案
  • 阿里云应用高可用服务公测发布
  • 第十八天-企业应用架构模式-基本模式
  • 翻译:Hystrix - How To Use
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 每天10道Java面试题,跟我走,offer有!
  • 漂亮刷新控件-iOS
  • 深入浏览器事件循环的本质
  • 使用API自动生成工具优化前端工作流
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一、python与pycharm的安装
  • 源码安装memcached和php memcache扩展
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​虚拟化系列介绍(十)
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2020)Java后端开发----(面试题和笔试题)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (备忘)Java Map 遍历
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (论文阅读笔记)Network planning with deep reinforcement learning