IOC控制反转
先从最基础的mvc三层来讲,一般在controller中new出service的实现类,在service中new出dao实现类,层层联系都非常紧密,专业来讲就是耦合度高,spring为了解耦合,想不再以new对象的形式来获取一个实例,然后就有了控制反转一说,看反转这个字面意思也感觉好像我不是主动去拿我要的实例对象了,而是以一种方式递给我,的确,spring有ioc容器一说,这个容器也就是xml配置文件,在配置文件中可以配置bean,一个bean就相当于一个类,你可以从容器中取出你要的实例对象,例如以下:

<bean id="person" class="cn.hp.bean.Person"></bean>
public static void main(String[] args) {ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");Person person = app.getBean("person",Person.class);System.out.println(person);
}

第一个代码片段是在配置文件中定义bean,第二个是获取person实例对象,但是看到main方法,这不还是要手动获取实例对象嘛,还是存在一定的耦合啊,这时候要用到对成员属性值的注入;

DI依赖注入
这个注入就是为类中的属性赋予值,之前我们说控制反转,希望能把bean实例自动递给我们,DI就可以实现这个操作,还是以三层且面向接口举例子,在controller层中定义一个service接口,你可以通过配置xml或给service接口加上注解的方式,把service实现类赋予接口,前提是controller和service实现类要在容器中,代码以下:

@Controller
public class UserController {@Autowiredprivate UserService service;public void hello(){service.hello();}
}
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao dao;@Overridepublic String hello() {return dao.hello();}
}

DI可以将在容器中匹配到类型一致的实例注入给相应接口,这样的确实现了反转及自动注入的效果,极致的解除了耦合,那如果容器中存在多个类型一致的实现类该怎么办,可以使用@Qualifier(value="")@Resource(name="")注解来灵活获取某一个实现类,也不需改动Java代码。

对IOC与DI举一个生活中场景的小例子
你要给你女儿过生日,你所在的镇上没有蛋糕店,你只能自己操心自己做,后来镇上开了一家蛋糕店,你只要给店里打个电话说出你的需求,店家会骑车把蛋糕送到你家门口,你感到很开心。

用大白话来说一说对spring IOC、DI 的理解相关推荐

  1. 6. Laravel5学习笔记:IOC/DI的理解

    介绍 IOC 控制反转 Inversion of Control 依赖关系的转移 依赖抽象而非实践 DI 依赖注入 Dependency Injection 不必自己在代码中维护对象的依赖 容器自动根 ...

  2. spring ioc di 原理解析

    spring ioc原理(看完后大家可以自己写一个spring) 控制反转/依赖注入 其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩.Java程序员都知道:java程序中 ...

  3. 2.spring IOC(DI)

    1. IOC(DI) - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和 ...

  4. Spring+IOC(DI)+AOP概念及优缺点

    Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...

  5. Spring Ioc/DI 控制反转和依赖注入

    Ioc(Inversion of Control)和DI(Dependency Injection)的全称分别是控制反转和依赖注入. 如何理解这两个概念呢? Ioc Ioc(控制反转)实际上就说把对象 ...

  6. 对Spring loC DI的理解

    文章转自https://www.cnblogs.com/Mr-Rocker/p/7721824.html,仅供个人学习所用,好东西当然要多多学习啊(#^.^#) 学习过Spring框架的人一定都会听过 ...

  7. spring IoC/DI

    一.spring创建对象的三种方式: 1.通过构造方法创建 无参构造创建:默认情况 有参构造创建:需要明确配置 <constructor-arg>中配置 index:参数索引 name:参 ...

  8. 玩转Spring——Spring IOC/DI

    什么是IOC ioc :Inversion of Control,即控制反转. 它不是一种技术,而是一种设计思想,即java程序中获取对象的方式发生反转,由最初的new方式创建,转变成由第三方框架创建 ...

  9. spring IOC DI AOP

    IOC bean工厂 getbean(String):Object 三种方式 核心是一个map单例 双重加锁校验 DI 构造参数 *实例工厂方法和静态工厂方法 原型bean缓存多次利用 循环依赖问题 ...

最新文章

  1. (C++)201709-1 打酱油
  2. BCH零确认和比特币RBF该怎么选?
  3. 利用Proceesson在线绘制流程图实例演练!流程图的要点和注意事项说明
  4. 8、Power Query-合并查询详解
  5. python列表中字典排序_python中字典排序,列表中的字典排序
  6. 开发工具MyEclipse如何支持可视化设计HTML和JSP页面
  7. C# 修改项目文件夹名称完全版
  8. 常识推理相关最新研究进展
  9. JAVA中的线程安全与非线程安全,java面试题,java高级笔试题
  10. SAP License:ERP面试记
  11. ocienvcreate php 失败_win7 homebasic下,.net2008 连接oracle,提示错误OCIEnvCreate
  12. mysql报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
  13. 计算机维护工作周报,运维周报怎么写呀,这一周没什么事做
  14. 编程基础知识之浮点型
  15. 网课答案公众号查询方法
  16. HDS 高端存储TC原理和配置总结
  17. linux编译sqrt,linux c sqrt
  18. 使用Javascript的跨浏览器支持的图像偏斜效果
  19. htcvr设备计算机配置,HTC VIVE需要怎样的电脑配置
  20. 云服务器是什么?云服务器有什么作用?

热门文章

  1. 应用计算机行业历史,计算机应用行业:浩历史指引未来 看好
  2. 【STM32】stm32驱动TB6600控制42/57步进电机的案例(TIM中断和PWM实验)
  3. 两周!从入门到第15到第3!小白和你一起入门NLP
  4. 分析葡萄酒化学成分及Logistic回归预测葡萄酒口感
  5. 海量数据处理:十道面试题与十个海…
  6. 为了练好口语,你敢不敢每天读一遍,坚持一个月?
  7. 【JAVA今法修真】 第八章 仙道万维网 圣地元宇宙
  8. JAVA—— JQuery
  9. 魔兽地图编辑器插件YDWE的使用与基本设置5 触发编辑器2 时间事件
  10. 恒大健康对贾跃亭提出仲裁全面反诉 称后者强行赶走出纳员