Spring IOC
来源:互联网 发布:开心消消乐数据同步 编辑:程序博客网 时间:2024/06/02 06:46
1.1 IOC的思想
IOC(Inversion Of Control, 控制反转):
控制反转是一种思想,在Java编程中,IOC就意味着将你设计好的对象交给IOC容器进行管理,而不是在你对象的内部直接控制其他的对象。
在传统的Java程序开发中,我们直接在对象内部通过new来创建一个对象,是程序主动去获取对象,使用完之后还需要将对象销毁(如connecttion),对象会和其他的类产生耦合;而spring IOC 则是容器负责创建并管理对象。例如A对象需要B对象进行协作,由spring完成创建对象B的工作,并将对象B保存到一个容器当中。当对象A需要该对象B进行协作时,spring从容器中取出对象B并交给对象A使用,对象A无需关心对象B是如何创建的、什么时候创建好的,只关心对象B能够协同工作就行。
IOC编程思想对编程带来的最大改变不是代码上的,而是思想上的“主从变换”。应用程序原本是主动的,需要什么资源都是主动出击;而在IOC编程思想中,应用程序变成被动的,由IOC容器来创建并注入所需要的资源。
例如说找女朋友的过程,在没有IOC思想的情况下,我们需要注意观察每一个妹子,然后打听她们的兴趣爱好、QQ、微信等,还要投其所好。。。。在IOC思想的情况下,那么婚介所就相关于IOC容器,婚介所保存许多妹子的相关信息,我们只需要向婚介所说明我们需要身高168、长得漂亮。。。的妹子,那么婚介所就会给我们提供这样的妹子,我们只需要去妹子聊天、约会就行。
spring倡导的开发方式就是如此,所有的类都需要在spring容器进行登记,告诉spring你是个什么东西、你需要什么东西,然后spring会在程序运行到适当的时候把你所需要的东西给你,同时也会把你交给需要你的东西。所有类的创建和销毁都是由spring负责,也就是说控制对象生命周期的不是引用它的对象,而是spring。对于某个具体对象而言,以前是它控制引用对象的生命周期,现在所有对象的生命周期都是由spring来控制,这就叫做控制反转。
它的思想就是由spring容器来负责实现依赖对象的创建、协调工作,对象本身只需要关注其业务逻辑即可。从这方法面来看,对象如何获取依赖对象的责任被反转了。
IOC是spring的核心思想。
1.2 DI依赖注入
在系统运行过程中,通过DI(Dependency Inject)动态为对象提供它所需要的对象。
spring是通过反射来实现注入的。而反射允许在程序运行时,动态地生成对象、执行对象的方法、以及改变对象的属性。
下面简单示例spring 的运行过程:
public static void main(String args[]){ ApplicationContext context=new ClassPathXmlApplicationContext("application.xml"); Cat cat=(Cat)context.getBean("cat"); cat.getName(); }
application.xml中的内容:
<bean id="cat" class="runner.Cat"> <property name="name" value="hello"></property> </bean>
Cat类:
public class Cat { String name; public void setName(String name){ //必须包含setter方法,因为在生层bean的过程中需要对成员变量进行初始化 this.name=name; } public void getName(){ System.out.println(name); }}
上述代码便是一个简单的spring运行过程,那么如果自己实现spring的话,那么可以这样写:
//定义一个Bean类 class Bean{ String id; String type; HashMap<String,Object> = new HashMap<String,Object>();}
这样,HashMap中String对应bean的id,而Object则对应存储的bean。这样,当我们调用context.getBean便根据bean id从HashMap中获取对用的bean。这只是一个简单的类比。
1.2 IOC体系结构
… 待续
参考博客:
http://blog.csdn.net/it_man/article/details/4402245
http://blog.csdn.net/qq_22654611/article/details/52606960
- IOC、Spring的IOC
- Spring IoC
- [Spring]IoC
- Spring IOC
- Spring IOC
- spring IOC
- Spring IOC
- Spring IOC
- Spring Ioc
- Spring IoC
- spring ioc
- Spring IOC
- spring IOC
- Spring Ioc
- Spring IoC
- Spring IOC
- Spring IOC
- Spring IoC
- 六大设计原则详解(4)-接口隔离原则
- CRC32 在 java中使用
- 23种设计模式(12):策略模式
- Alpha、Beta、RC、GA版本的区别
- scp命令使用说明
- Spring IOC
- java 获取数据类型getClass()
- 揭秘互联网空手套白狼的灰色项目
- 调整数组顺序使得奇数位于偶数前面
- HTTP 协议中 URI 和 URL 有什么区别
- 自定义View (二)---onMeasure
- 求n个数中最小的K个数。
- 天天学Linux命令27--用SecureCRT来上传和下载文件
- ICMP消息的作用和控制