Spring IOC注解
IOC简介:IOC又称为控制反转,依赖注入。个人理解为把hibernate与数据表对应的实体类通过注解绑定到Spring上,达到类似于int、double类型的直接使用不需要new的目的
控制反转指获得依赖对象的过程被翻转了(以前是自己new,现在是Spring自动给)。、
依赖注入指由IOC容器在运行期间动态的将某种依赖关系注入对象中
IOC思路1控制反转举例:
机械式手表中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似,如图所示
对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。但在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。使用IOC后如下图所示
上图中为IOC在项目中的解耦过程,由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。
IOC思路2依赖注入思路举例:
PC主机要读取外部设备文件时,它不会关心USB接口上连接的是什么外部设备,而且它确实也无须知道。PC主机的任务就是读取USB接口,挂接的外部设备只要符合USB接口标准即可。所以,如果我给电脑主机连接上一个U盘,那么主机就从U盘上读取文件;如果我给电脑主机连接上一个外置硬盘,那么电脑主机就从外置硬盘上读取文件。挂接外部设备的权力由我作主,即控制权归我,至于USB接口挂接的是什么设备,电脑主机是决定不了,它只能被动的接受。电脑主机需要外部设备的时候,根本不用它告诉我,我就会主动帮它挂上它想要的外部设备,你看我的服务是多么的到位。这就是我们生活中常见的一个依赖注入的例子。在这个过程中,我就起到了IOC容器的作用。
通过这个例子,依赖注入的思路已经非常清楚:当电脑主机读取文件的时候,我就把它所要依赖的外部设备帮他挂接上。整个外部设备注入的过程和一个被依赖的对象在系统运行时被注入另外一个对象内部的过程完全一样。
我们把依赖注入应用到软件系统中,再来描述一下这个过程:
对象A依赖于对象B,当对象A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。在传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。IOC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。Spring IOC 注解配置方式
1.在spring.xml里使用<context:component-scan>标签后Spring会扫描指定包中使用@component注解的类,把它们自动注册为Spring Bean类
2.使用@Component(“XXX”)写在定义类的前一行,Spring扫描包时会发现使用@Component注解的类,并自动将它注册为Spring Bean类。