Spring IoC容器
Spring IoC容器的设计主要是基于BeanFactory和ApplicationContext两个接口
Bean工厂BeanFactory
由org.springframework.beans.factory.BeanFactory接口定义,作为制造Bean的工厂,BeanFactory接口负责向容器的使用者提供实例,其功能主要是负责初始化各种Bean,并根据预定的配置完成对象之间依赖关系的组装,最终向使用者提供已完成装配的可用对象。
Bean工厂ApplicationContext
继承自BeanFactory接口,ApplicationContext接口有三个常用的实现类
ClassPathXmlApplicationContext
之前代码中用到的就是这种方式
FileSystenXmlApplicationContext
读取spring配置文件的方式不在从类路径中读取文件,而是通过参数指定配置文件的位置,可以获得路径之外的资源
XmlWebApplicationContext
从web应用中寻找指定的xml配置文件
但这些实现类再实例化ApplicationContext后,同样通过getBean方法从ApplicationContext容器中获取装配好的Bean实例以供使用。
在Java项目中最好用 ClassPathXmlApplicationContext,但web项目中就不行了
web项目的启动是由相应的web服务器负责的,因此在web项目中,ApplicationContext容器的实例化工作最好交由web服务器完成,spring为此提供了如下两种方式
基于ContextLoaderListener实现
基于ContextLoaderServlet实现
Bean的配置
在Spring中,XML配置文件的根元素是<beans>,其下包含<bean>子元素,每个<bean>子元素定义了一个Bean,并描述该Bean如何被装配到Spring容器中。
<bean>元素包含了多个属性,其常用属性包括id,name,class,scope
<bean>元素中同样包含了多个子元素:constructor-arg,property,ref,value,list,set,map,entry
今天累了,改天有空再把具体介绍码上来。
Bean的作用域
就是指Bean实例的生存空间或有效范围
- singleton:在每个Spring IoC容器中,一个bean对应一个对象实例(默认的)
- prototype:一个bean定义对应多个对象实例
- request:
- session:
- global session:
处于默认的单例模式
prototype
Bean的装配模式
也就是Bean依赖注入
基于XML的Bean装配
前面用的基本都是XML装配
- 构造方法<constructor-arg>
- 属性setter方法<property>
基于Annotation的Bean装配
bean特别多时,xml文件会显得特别臃肿,从JDK5开始提供了Annotation(注解)的功能
- @Component注解
- @Repository注解 应用在DAO层
- @service注解 应用在业务层
- @Controller注解 应用在控制层
- @Resource注解
- @Qualifier注解
实例
同理
自动装配
Spring的<bean>元素中包含一个autowire属性,可通过设置autowire的属性来自动装配Bean.所谓自动装配,就是将一个Bean注入到其他Bean的Property中。autowire属性值及说明如下:
- default :默认值
- byName:
- byType:
- constructor:
- autodetect:
- no:
实例
对于大型的项目不建议使用自动装配,虽然自动装配可以减少配置文件的工作量,但是大大降低了依赖关系的清晰性和透明性。