spring的ioc与注入
来源:互联网 发布:淘宝客服注意事项 编辑:程序博客网 时间:2024/06/04 20:08
上篇提到了spring的aop,既然讲了spring的一大特点,今天乘着周六有时间就把另一大特点控制反转与依赖注入讲讲。主要讲一些原理概念性的东西,具体的代码实现就不讲了,写给没事就探索深究的小白,嘻嘻。
首先,spring最核心,最基础的概念是什么?将spring类比java,java最核心,最基础的概念就是object了。java中,所有的操作都是针对object的(基础类型除外),java中,一切皆对象,一切都是object。类比下来,spring中最基础的概念是bean。在spring中,所以的类都可以认为是一个bean。在spring中的所有文件,都可以认为是注册了的bean和未注册的bean。 spring中所有操作都是针对bean的操作。自然,spring的三大核心思想中操作的对象,也是bean。
这段话将的还是很有道理的,即用spring操作,不管是xml还是注解形式,我们操作的单元都是bean对象。
Control:控制,即所有的程序都有我们的硬编码来控制,放在java中来看的话,就是我们的一个类test1需要另一个类test2中的方法时,只能在test1的类中实例化test2来调用其方法,test1与test2耦合的非常紧密,若是需要换成test3类中的方法时,只能改变代码,将test2删去,将test3实例化,加进去。这个”控制“的意思,就是在程序运行时,调用test1实例时,即会实例化test2和test3。
IOC:inverse of Control:控制反转。意思是程序中的之间的关系,不用代码控制,而完全是由容器来控制。在运行阶段,容器会根据配置信息直接把他们的关系注入到组件中。说白了就是:在xml中配置好这些关系后,系统启动时容器即会自动将test2和test3的实例注入到test1中,即”控制反转“,由容器控制。
同样,这也是依赖注入的含义。依赖注入和控制反转其实是一个概念。只不过强调的不同而已,依赖注入强调关系的注入是由容器在运行时完成,而控制反转强调关系是由容器控制。其实本质是一样的。
控制反转:我们在使用一个类型的实例实现某个功能时,需要先new出该类型的一个实例,并赋值给我们声明的某个引用变量,这样我们才能够使用该变量进行操作。而new和赋值本事我们自己的权限,此处便是将该控制权限反转交给了spring。
依赖注入:某个类型要完成一个功能往往需要其他类型的变量来完成,我们在程序中往往通过自己new的方式来完成这个需求,而在spring中,它会帮助我们将这种装配的功能实现,这便是依赖注入。
其中依赖注入包括三种:一种赋值注入(使用getter和setter方法);另一种使用构造器注入,还有一种方法是接口注入。
看程序中student中的ID,name都是使用get,set来赋值的:那在配置文件是如下配置:
<property name="id" value="001"/> <property name="name" value="张三"/>
并且Student中的school属性是School类型,则在容器中是如下配置的:
<property name="school" ref ="school"/>
而在程序中的School中的name是构造器赋值的,则容器中是如下配置的:
<constructor-arg index="0"> <value>廊坊师院</value></constructor-arg>
构造器中一个参数,则索引值是从0开始,若是有多个,依次递增。
若构造器中的是一个类,则使用bean标签
<constructor-arg index="0"> <bean class="具体的类"> </constructor-arg>
接口注入就不用细说了,用的时候就自然理解了。
使用IoC的好处:
(1).可维护性比较好,非常便于进行单元测试,便于调试程序和诊断故障。代码中的每一个Class都可以单独测试,彼此之间互不影响,只要保证自身的功能无误即可,这就是组件之间低耦合或者无耦合带来的好处。
(2).每个开发团队的成员都只需要关注自己要实现的业务逻辑,完全不用去关心其他人的工作进展,因为你的任务跟别人没有任何关系,你的任务可以单独测试,你的任务也不用依赖于别人的组件,再也不用扯不清责任了。所以,在一个大中型项目中,团队成员分工明确、责任明晰,很容易将一个大的任务划分为细小的任务,开发效率和产品质量必将得到大幅度的提高。
(3).可复用性好,我们可以把具有普遍性的常用组件独立出来,反复应用到项目中的其它部分,或者是其它项目,当然这也是面向对象的基本特征。显然,IoC更好地贯彻了这个原则,提高了模块的可复用性。符合接口标准的实现,都可以插接到支持此标准的模块中。
(4).IoC生成对象的方式转为外置方式,也就是把对象生成放在配置文件里进行定义,这样,当我们更换一个实现子类将会变得很简单,只要修改配置文件就可以了,完全具有热插拨的特性。
有时间可以理解一下底层的beanFactory的原理,也就彻底明白了spring的工作机制了,
参考:http://www.cnblogs.com/digdeep/p/4518571.html
本篇博客参考:http://www.cnblogs.com/gaopeng527/p/5246704.html
- spring的ioc与注入
- Spring IOC与依赖注入
- Spring的依赖注入IoC
- spring ioc容器的注入
- Spring ioc 的依赖注入
- Spring之ioc操作与属性注入
- spring框架详解(一)--IOC与注入
- 【Spring】Spring依赖注入IOC的设值注入setter
- Spring的 IOC 依赖注入方式
- Spring IoC依赖注入的实现
- Spring的注入,Ioc,DI详解
- spring的IoC初始化和依赖注入
- Spring的IOC依赖注入实例
- Spring之IOC的注入方式总结
- Spring的IOC容器—依赖注入
- Spring之IOC的注入方式总结
- Spring IOC使用(1) bean的注入
- Spring Ioc注入的四种方式
- POJ-1260 Pearls 【DP】
- IOS 权限
- 博客前台模板
- POJ1338 Ugly Numbers 堆优化+模拟
- 【Mongoose】Mongoose增删改查
- spring的ioc与注入
- 如何访问谷歌
- 论文
- Python爬虫爬取知乎小结
- (转)Android SwipeRefreshLayout 官方下拉刷新控件介绍
- Cloudify:打通应用和基础架构自动化交付的“任督二脉”
- Java基础语法(3)
- Android视频数据采集,H.264编码
- 算法训练 动态数组使用