30岁的小曹,20岁的身体,还在坚持在能力允许控制范围内22点睡觉,5点起床锻炼身体,好好学习,除了加班或者像今天这样的深夜,再一次写已经有X百万人写过的 spring Ioc 的总结博客。

一、IOC 控制反转详解:

1).传统非spring管理时候的对象间调用依赖:

我们都知道,随便一本破框架的破书上都说Spring的核心之一IOC-控制反转,控制反转是管理bean的,什么是bean?一切java对象。java对象怎么来的? A a = new A(),New出来的。

那么我们定义个 Pig 类:

public class Pig

{

  public String eat()

  {

    return "猪会吃!";  

  }

}

我们在定义一个类: Person

public class Person

{

  private Pig pig;

  public  void setPig(Pig pig)

  {

    this.pig pig;

  }

  public void usePig()

  {

    System.out.println("我打算去喂猪!");

    System.out.println(pig.eat());

  }

}

测试:

public class BeanNSTest

{

  public static void mian(String[] args)throws Exception {

    Pig pig  = new Pig();

    Person person = new Persion();

    person.setPig(pig);

    person.usePig();

  }

}

我打算去喂猪!

猪会吃!

//上面介绍的是java传统方式,调用者person主动去创建被依赖对象pig,然后在去调用被依赖对象pig的方法eat。比如上面 Person 主动创建对象pig,然后调动pig.eat()输出。

2). 使用spring 后,spring管理bean是通过用XML配置文件之间管理bean的,例如上面的人和猪的依赖关系:

bean.xml

<bean id="person" class="com.test.Person">

  <property name="pig" ref="pig">

</bean>

<bean id="pig" class=“com.test.Pig”>

//<property>中name="pig"的pig是 Person方法中setPig的方法,ref="pig"的pig是setPig的参数;

public class BeanTest

{

  public static void mian(String[] args)throws Exception {

    ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");

    Person p = ctx.getBean("person",Person.class)

    p.usePig();

  }

}

//结果:

我打算去喂猪!

猪会吃!

从第二种测试结果来看:使用spring框架后,调用者无需主动获取被依赖对象,只需要被动接受spring容器为调用者的成员变量赋值即可(配置文件property),由此可见,使用spring后 调用者获取被依赖对象的方式由原来的主动获取,变成了 被动接受。于是Rod Johnson【绕波特 . 真桑】将这种方式称为控制反转 IOC。

一、DI依赖注入 超级详解:

1). 因为spring容器 将依赖对象注入给了调用者(通过配置文件),所以调用者无需 主动获取被依赖对象,只要被动等待spring容器注入即可。所以 Martine Fowler【马蹄 . 弗劳尔】 称者叫依赖注入DI。

所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI。重要的事情说4遍。

当然spring发展到今天已经由原来的xml配置,改成代码里面注解方式了,更方便点。后续有空再给介绍下,希望未来有人会看到。

30岁的小曹,20岁的身体,go ahead!

学习Spring IOC控制反转和DI依赖注入总结的更多相关文章

  1. [Spring]IOC控制反转和DI依赖注入

    从之前算起到现在接触Spring也已经有几天了,进度也不是很快,就只弄懂了控制反转和依赖注入那么一点东西.然后敲了两个demo 主要是因为之前没有学过,然后网上资源很多但是都不是面向我们初学者的,大多 ...

  2. Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)

    Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧) 1.IoC是什么?    IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多 ...

  3. [转帖]什么是IOC(控制反转)、DI(依赖注入)

    什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642   原文地址(摘要了部分内容):https://blog.csdn.net ...

  4. 谈谈php里的IOC控制反转,DI依赖注入

    理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...

  5. IoC控制反转与DI依赖注入

    IoC控制反转与DI依赖注入 IoC: Inversion of Control IoC是一种模式.目的是达到程序的复用.下面的两篇论文是对IoC的权威解释: InversionOfControl h ...

  6. 谈谈php里的IOC控制反转,DI依赖注入(转)

    转自:http://www.cnblogs.com/qq120848369/p/6129483.html 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和" ...

  7. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...

  8. 三大框架 之 Spring(IOC控制反转、DI依赖注入)

    目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...

  9. spring(一) IOC 控制反转 、DI 依赖注入

    IOC 控制反转:创建对象的方式  变成了由Spring来主导 IOC底层原理:对象工厂 1.导入jar包:4个核心jar和1个依赖jar spring-beans-4.3.9.RELEASE.jar ...

随机推荐

  1. Sql批量插入时如果遇到相同的数据怎么处理

    测试数据 -- 创建测试表1 CREATE TABLE `testtable1` ( `Id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `UserId` I ...

  2. 谷歌浏览器安装插件时出现:程序包无效:“CRX_HEADER_INVALID" 后的解决办法

    以安装书签管理插件Neater Bookmarks为例: 1.下载:网址http://www.cnplugins.com/zhuanti/sixbookmarksintroduce.html 2.将下 ...

  3. 菜鸟程序员成长史 --记 Github 1000+ contributions

    其实一直以来想写一篇文章总结这几年的技术学习,刚好趁着自己的第一次github contribution 达到1000+,写篇文章总结以下.本文篇幅较长,我会分为几个章节来分别阐述. 博客篇 为什么我 ...

  4. ubuntu18.04 设置环境变量

    1.第一步:命令行输入 sudo gedit /etc/profile 2.第二步:将你想要设置环境变量的内容追加到文件结尾 例如:export JAVA_HOME=/usr/java/latest ...

  5. Maven中添加Jetty服务器配置

    <project> <!--其它配置--> <build> <plugins> <plugin> <groupId>org.mo ...

  6. BZOJ 1233 干草堆 (单调队列优化DP)

    $ BZOJ~1233~~ $ 干草堆: (题目特殊性质) $ solution: $ 很妙的一道题目,开始看了一眼觉得是个傻逼贪心,从后往前当前层能多短就多短,尽量节省花费.但是这是DP专题,怎么会 ...

  7. home home clock

    博客园添加home home clock 将下面代码复制进博客侧边栏广告即可 <div id="myTime"> <object classid="cl ...

  8. hdu 1693 : Eat the Trees 【插头dp 入门】

    题目链接 题意: 给出一个n*m大小的01矩阵,在其中画线连成封闭图形,其中对每一个值为1的方格,线要恰好穿入穿出共两次,对每一个值为0的方格,所画线不能经过. 参考资料: <基于连通性状态压缩 ...

  9. vue框架搭建--移动端

    由于Vue官方提供了vue-cli手脚架,所以快速构建出个简单的项目框架.在做移动端项目时,因为移动端的特性可能会用到些比较常用的插件,就在这里简单介绍如何使用 这里只介绍怎么在项目中安装引用和简单的 ...

  10. 学习日记12、list集合中根据某个字段进行去重复操作

    List<T_CusBankCardInfoModel> blist = B_BLL.GetListByCusId(CusIds).Distinct(new ModelComparer() ...