您的位置:首页 > 编程语言 > Java开发

Spring IoC容器

2015-08-31 14:54 519 查看
IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。为什么这么说呢?传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间耦合度高,难于测试;有了Ioc容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,对象只是被动的接受依赖对象,这样使得对象与对象之间耦合度变低,有利于功能复用。

从上面的一段话可以看出所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,在系统运行中,动态的向某个对象提供它所需要的其他对象,这也就是所说的控制反转。

IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。在Spring中BeanFactory是IOC容器的实际代表者,它提供了高级IoC的配置机制,是spring框架中最核心的接口。Beanfactory使管理不同的java对象成为可能,应用上下文applicationContext建立在BeanFactory基础之上,提供了更多面向应用的功能,它还提供了国际化支持和框架事件体系,更易于创建实际应用。一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文。

对于这两者的用途可以这样简单的理解:BeanFactory是Spring框架的基础设施,面向Spring本身;ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非BeanFactory。

而WebApplication是专门为Web应用准备的,它允许从相对于Web根目录的路径中装载配置文件,完成初始化工作。从WebApplicationContext中可以获得ServletContext的引用,整个Web应用上下文对象将作为属性放置到ServletContext中,以便Web应用环境可以访问Spring应用上下文。并且Spring提供了用于启动WebApplicationContext的Servlet和web容器监听器。

同时Spring提供了一个强大的加载资源的机制,不但能通过“classpath:”、“file”等资源地址前缀识别不同的资源类型,还支持Ant风格带通配符的资源地址。

用户在使用Spring所提供的各种丰富的功能之前,必须在Spring中装配好Bean,并建立bean与bean之间的关系。下面这幅图展示了用用程序调用bean 的过程。



在Bean的配置过程中,用户不但可以通过属性注入的方式建立Bean与Bean之间的依赖关系,也可以通过构造函数的方式完成相同的任务,但是采用属性注入不管是对于代码编写还是Bean的配置都具有更大的灵活性,成为大多数开发者选择的方式。

在容器中的bean可以通过配置文件建立起关联关系,<ref>通过bean、local、parent引用容器中的其他Bean。

Spring为不喜欢配置的开发人员还提供了一条偷懒的方法,利用autowire=”<自动装配类型>”这个属性来实现。Spring提供了四种装配类型byName(根据名称进行自动匹配)、byType(根据类型进行自动匹配)、constructor(构造函数)、autodetect(采用byType或constructor)。不过因为自动装配减轻配置量的同时,造成了配置文件中Bean之间关系不清晰的问题,项目中很少使用自动装配功能。

Bean也是具有作用域的,配置方式为scope=”<作用域类型>”,作用域类型共有5种singleton(单例),prototype(每次返回新实例),request(http请求创建实例),session(http session共享一个session),gobalsession(全局session共享一个session)。

最后说明Bean的配置方式共有三种,基于xml配置,基于注解配置,基于java配置。一般采用xml配置datasource、sesssionFactory等资源。其他项目开发的Bean通过注解进行配置,而很少采用java类的配置方式。

总结的有些零散,有些乱,将自己所学的IoC这块的内容,做了一个笼统的概括,后期学习过程中还会不断完善,理清关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: