前边我们讲过了Spring的一大特性之IOC,即控制资源获取的方向,将传统的组件向容器请求资源的方式改为容器主动给组件推送资源的方式。下边我们来讲一讲在IOC容器中,如何配置一个Java类对应的bean节点从而创建某个类的实例。
1.bean的配置方式
在Spring中,当我们要向Spring的IOC容器中配置一个Java类的bean时,有两种方式,一是在xml文件中配置;还有一种是使用注解的方式。
其中使用xml的方式,我们还可以分为基于全类名、工厂方法(静态工厂方式和实例工厂方式)、FactoryBean的方式来创建某个类的实例。
IOC容器是Java当中使用的,所以要想使用它肯定要创建某个类的对象,Spring中可以使用ApplicationContext和BeanFactory来代替Spring的IOC容器,并从中获取bean实例。
在Spring的IOC容器的配置文件中,我们常常使用全类名反射的方式来创建某个类的实例,所以这个类中必须要有无参的构造器。
配置文件中,一个bean节点的id值可用于获取这个Bean的实例,因为它是唯一标识这个bean的。
2. 使用配置文件中的bean
ApplicationContext接口的一个实例对象代表着一个配置文件的IOC容器。
在SpringIOC容器读取bean节点的配置之前,必须要对这个IOC容器进行初始化,只有在IOC容器实例化之后,才可以从IOC容器中获取bean的实例。
Spring提供了两种IOC容器的实现,一是BeanFactory,二是ApplicaitonContext。BeanFactory是面向框架本身的,ApplicationContext是面向使用Spring框架开发的开发者,几乎所有应用场合都是用ApplicaitonContext而不是BeanFactory。需要注意的是,无论用哪种方式代表IOC容器,配置文件都是相同的。
3.ApplicaitonContext的实现类
① ClasspathXmlApplicaitonContext:从类路径下加载配置文件
② FileSystemApplicaitonContext:从文件系统下加载配置文件
③ WebApplicaitonContext:是专门为WEB应用准备,它允许相对于WEB根目录的路径中完成工作。
④ ConfigurableApplicaitonContext扩展于ApplicaitonContext接口,新增了refresh()和close()两个方法,让ApplicaitonContext具备不启动就可以刷新、关闭上下文的功能。
4.获取IOC容器中的bean实例
① 通过id:applicaitonContext.getBean("idName")
② 通过类的Class对象:applicaitonContext.getBean("Person.class")
5.依赖注入的方式
即对象依赖配置文件向bean对象中注入属性值。
① 属性注入:最常用,在配置文件中使用property标签调用类中的setXxx()方法给对象的属性赋值。
② 构造区注入:在配置文件中使用constructor-arg调用类中的带参的构造器为对象的属性赋值。需要注意的是通过type或者index为同类的属性区别赋值。