Spring IoC原理详解
去掌握一门技术的时候,往往很多人都忽略了一点,只是一味地去写代码,原理层面的东西从来就不理会
还有就是学习的过程中,不去想为什么有了当前的写法,却有着这么一门技术可以代替它
一般来说,在写程序的时候,一个类的实例创建都是直接通过 new className(); 语法来操作。说真的,
我写程序代码都不这么去做,我只需要在程序里定义一个接口类型的属性,直接通过属性来调用接口的方法
java代码:
public class Girl_1 implements Girl {
//定义一个接口类型的属性
private Dog dog;
//定义该属性的set方法,让Spring来调用
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public void playDog() {
// TODO Auto-generated method stub
//调用方法,实际上是调用接口的方法
dog.bark();
}
}
接口的实例来自于哪个Class类,在写代码的时候根本不用去理会,只需要在SpringXml配置文件中配置一下就可以了
Spring会自动的找到ClassBean_property所引用的类实例,调用Class类中属性的set方法来注入一个Class类实例
xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<!-- 一个bean就是一个类的实例 -->
<bean id="girl" class="springAop.Girl_1" scope="prototype"> <property name="dog" ref="labrador" />
<!-- 图_3所示的接口类型的dog属性 --> </bean> <!-- 通过property标签的ref属性,引用一个类的实例labrador -->
<bean id="labrador" class="springAop.Labrador" scope="prototype" /> <bean id="shepherdDog" class="springInject.ShepherdDog" scope="prototype" /> </beans>
这里就涉及到IoC了,Inversion Of Control (控制反转),这让很多人不解,被控制的是谁,反转指的又是什么,举一反三,有反转就有正转
梦逸来告诉大家
其实IoC真正意义上是[资源提供者],互联网上所说的控制反转中的控制也并不是一个动作,只是一个名词,所以大家不要弄混了
Spring的xml配置文件就相当于是一个容器,它托管着整个程序中的Class类实例,通过在xml文件中定义一个bean,(上文xml代码所示)
bean标签指定一个Class类,然后在bean节点中的property标签指定Class类定义的接口类型的属性,通过property标签的ref属性指定一个bean标
签的id,注入一个实例给Class类中的属性。
(PS1:一个bean就是一个类的实例;一个property就是Class类中定义的接口类型属性)
(PS2:property的ref属性指定ClassBean的id,注入一个Class类实例给Class类中定义的接口类型属性)
下面梦逸附上一张图帮助大家理解反转是怎么一回事

上图就是反转的大致解释了,写程序的时候,一般的代码都是直接的定义一个属性,然后直接创建一个实例并赋值:Girl girl = new Girl_2();
IoC设计模式很人性化的实现了这一点,反过来了,使用Ioc设计模式,程序代码中不再出现 new Girl_2();这种new关键字的创建实例代码
只需要在程序中定义一个属性,属性的值是null,也就是说不用赋值,然后添加该属性的set方法,让Spring调用该属性的set方法注入一个实例
梦逸、原创,转载请注明原文地址
Spring IoC原理详解的更多相关文章
- Spring IOC使用详解
SpringIOC使用详解 一.IOC简介 IOC(Inversion of Control):控制反转,即对象创建的问题.通俗地讲就是把创建对象的代码交给了Spring的配置文件来进行的.这样做的优 ...
- Spring ——Spring IoC容器详解(图示)
1.1 Spring IoC容器 从昨天的例子当中我们已经知道spring IoC容器的作用,它可以容纳我们所开发的各种Bean.并且我们可以从中获取各种发布在Spring IoC容器里的Bean,并 ...
- Spring IoC 使用详解
在Spring中,依赖注入(DI)模式实现了控制反转(IoC)原理.让我们通过一个例子来帮助理解依赖注入.我们先看到java版的例子,然后在此基础上加上spring的功能.就例子而言,是相当地简单.Q ...
- Spring Cloud原理详解
概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...
- [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。
一.Spring Ioc容器详解(1) 20131105 1.一切都是Bean Bean可是一个字符串或者是数字,一般是一些业务组件. 粒度一般比较粗. 2.Bean的名称 xml配置文件中,id属性 ...
- Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计
在对IoC有了初步的认知后,我们开始对IOC的实现原理进行深入理解.本文将帮助你站在设计者的角度去看IOC最顶层的结构设计.@pdai Spring框架系列(6) - Spring IOC实现原理详解 ...
- Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程
上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...
- Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)
上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...
- spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途
Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...
随机推荐
- 12月14日《奥威Power-BI销售计划填报》腾讯课堂开课啦
2016年的最后一个月也过半了,新的一年就要到来,你是否做好了启程的准备?新的一年,有计划,有目标,有方向,才不至于迷茫.规划你的2017,新的一年,遇见更好的自己! 所以 ...
- soap和wsdl的定义
SOAP(Simple Object Access Protocol)是一个严格定义的信息交换协议,用于在Web Service中把远程调用和返回封装成机器可读的格式化数据.事实上SOAP数据使用XM ...
- Ubuntu文件操作命令
1.工具栏放下面或者左边的命令 gsettings set com.canonical.Unity.Launcher launcher-position Left gsettings set com. ...
- objective-c第六章课后练习5
题5:用于翻转从终端输入数的各个位.然后修改这个程序,以便正确的输入负数. code: ,result_5 = ; NSLog(@"input num_5:"); scanf(&q ...
- jquery通过name,id名称获取当前value值
name是input标签的属性值,jQuery提供了attr() 方法用于设置/改变属性值 $("input:text").attr("name");$(&qu ...
- 谷歌大神Jeff Dean:大规模深度学习最新进展 zz
http://www.tuicool.com/articles/MBBbeeQ 在AlphaGo与李世石比赛期间,谷歌天才工程师Jeff Dean在Google Campus汉城校区做了一次关于智能计 ...
- 14. 星际争霸之php设计模式--状态模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- volatile使用详解
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”:与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少, ...
- Tomcat6性能优化
1.内存设置 Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx51 ...
- [课程设计]Scrum 2.3 多鱼点餐系统开发进度 (订单一览设计)
Scrum 2.3 多鱼点餐系统开发进度 (订单一览设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...