Spring之控制反转(IoC)
来源:互联网 发布:文都集训营 知乎 编辑:程序博客网 时间:2024/05/17 03:55
一、IoC概念
IoC(Inversion of Control):中文译为控制反转。
IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。
其原理是基于OO设计原则的The Hollywood Principle:Don't call us, we'll call you(别找我,我会来找你的)。也就是说,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。
简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
二、Spring IoC
Spring IoC容器实现了IoC设计模式,对外提供两个接口实现对Spring IoC容器的访问:
1. BeanFactory:位于org.springframework.beans.factory包中。借助于配置文件实现对JavaBean的配置和管理。主要应用于开发Java应用。
2. ApplicationContext:位于org.springframework.context包中。继承于BeanFactory,增加了IoC集成、处理消息资源、事件等功能。主要用于开发J2EE应用,是Spring推荐使用的接口。
要获得appcontext.xml中定义的JavaBean,应用代码只需要调用BeanFactory的getBean方法即可。
Bean的生命周期
IoC容器定义了Spring配置文件中JavaBean应遵循的规则,即Bean定义(BeanDefinition)。任何处于IoC容器控制下的JavaBean的生命周期都存在4个阶段:
1.实例化JavaBean。
2.JavaBean实例的初始化,即通过IoC注入其依赖性。这一阶段将完成JavaBean实例的初始化。
3.基于Spring应用对JavaBean实例的使用。
4.Ioc容器销毁JavaBean实例。
Bean的创建
声明方式:<bean name="fileHelloWorld" class="testspring.sample.HelloWorld"/>
可用参数:
factory-method:声明创建JavaBean的工厂方法。
factory-bean:声明工厂类。
<ref>:引用其它资源(bean实例)。
初始化JavaBean
1.可以使用autowire属性,使Spring自动将目标JavaBean需要注入的JavaBean找到并注入进来。
2.使用dependency-check属性,保证各个Spring配置文件中各个JavaBean之间的相互关系。
3.借助setter方法,将JavaBean的属性值注入进来。这些属性值可以使Java原型、对象类型、其它JavaBean、null等。
4.如果JavaBean实现了org.springframework.beans.factory.BeanFactoryAware接口,则还需要调用setBeanFactory方法。
5.Spring框架提供了若干接口,供开发者改变配置在BeanFactory中JavaBean的行为时使用。比如InitializingBean接口。BeanFactory初始化JavaBean时,会调用实现了InitializingBean接口的JavaBean中的aferPropertiesSet()方法。
6.通过在<bean>元素中包含init-method属性能够达到同InitializingBean一样的目的。即初始化时会自动调用init-method中定义的方法。
注意:如果5和6两者同时使用,Spring首先执行5中的aferPropertiesSet()方法,然后执行init-method中定义的方法。
使用JavaBean
一旦Spring创建并初始化JavaBean实例后,应用就可以使用JavaBean实例了。
销毁JavaBean
一旦将基于Spring的(Web)应用停止,Spring框架将调用那些JavaBean实例中存在的生命周期方法,比如实现了DisposableBean接口的JavaBean,或者在Spring配置文件中指定了destroy-method苏醒的JavaBean。
注意:
1.上述内容只适合于通过“singleton”方式创建的JavaBean实例。对于以“prototype”方式创建的JavaBean实例,Spring并不能够控制其生命周期。
2.JavaBean创建时间。对于BeanFactory而言,在用户调用getBean()方法时创建JavaBean实例。而对于ApplicationContext而言,一旦ContextLoaderServlet或ContextLoaderListener初始化成功,所有JavaBean实例都将会被创建。
- Spring之控制反转(IoC)
- Spring之控制反转(IoC)
- Spring之控制反转(IoC)
- Spring IoC(控制反转)之IoC的使用
- Spring IoC(控制反转)
- Spring IoC(控制反转)
- Spring之什么叫控制反转(IoC )
- Spring之ioc控制反转(依赖注入)
- Kotlin的Spring之旅(二):IOC控制反转
- 长话短说Spring(1)之IoC控制反转
- Spring基础知识之IOC(控制反转)
- Spring详解篇之IoC控制反转
- Spring框架之IOC(控制反转)
- spring核心之IOC控制反转详解
- Spring之IOC—控制反转
- Spring IOC 反转控制
- Spring-----> IOC(控制反转)
- Spring - 控制反转IOC
- Oracle 的权限点滴...(精华)
- Java版本的FFT和Inverse FFT
- 稀疏文件:
- hibernate ORM实现原理
- JavaScript Prototype 详解
- Spring之控制反转(IoC)
- 关于SQL SERVER 2005 不能输入中文的解决方法
- 丶为什么人们总是在失去之后才懂得珍惜..
- Hadoop分布式文件系统:架构和设计要点
- extjs2.2项目开发总结
- UML教程笔记
- 要有自己的目标
- 项目开发的出发点如何考虑?
- Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列)