Spring配置文件
Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java EE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。Spring配置文件是一个或多个标准的XML文档,applicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。
1.Bean标签基本配置
- 用于配置对象交由Spring 来创建。
- 默认情况下它调用的是类中的无参构造函数。
- 如果没有无参构造函数则不能创建成功。
- 基本属性:
- id:Bean实例在Spring容器中的唯一标识 (不能重复)
- class:Bean的全限定名称
<!-- 创建applicationContext.xml --> <bean id="userDao" class="com.xmp.dao.impl.UserDaoImpl"> </bean>
2.Bean标签范围配置
scope:指对象的作用范围,取值如下:
取值范围 | 说明 |
singleton | 默认值,单例的 (默认) |
prototype | 多例的 |
request | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中 |
session | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中 |
global session | WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当 于 session |
1)当scope的取值为singleton时
- Bean的实例化个数:1个
- Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
- Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
- 测试
applicationContext.xml (scope="singleton")
<!-- 创建applicationContext.xml --> <bean id="userDao" class="com.xmp.dao.impl.UserDaoImpl" scope="singleton"> <!-- singleton单例 默认--> </bean>
测试,打印实例化的对象发现一样
@Test //测试scope的作用域 public void test() { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao1 = (UserDao) context.getBean("userDao"); UserDao userDao2 = (UserDao) context.getBean("userDao"); System.out.println(userDao1); System.out.println(userDao2); }
测试结果:
2)当scope的取值为prototype时
- Bean的实例化个数:多个
- Bean的实例化时机:当调用getBean()方法时实例化Bean
- Bean的生命周期:
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
- 测试
当测试scope的作用域改为prototype时:
3.Bean生命周期配置
3.1 init-method:
指定类中的初始化方法名称
//初始化方法,在实例化对象的时候调用 public void init() { System.out.println("UserDaoImpl init ......"); }
3.2 destroy-method:
指定类中销毁方法名称
//销毁方法,在销毁对象的时候调用 public void destroy() { System.out.println("UserDaoImpl destroy ......"); }
(1)关于Spring中对bean生命周期控制提供了两种方式:
- 在配置文件中的bean标签中添加
init-method
和destroy-method
属性 - 类实现
InitializingBean
与DisposableBean
接口,这种方式了解下即可。
<!-- 创建applicationContext.xml --> <bean id="userDao" class="com.xmp.dao.impl.UserDaoImpl" scope="prototype" init-method="init" (告诉Spring执行该方法) destroy-method="destroy" (告诉Spring执行该方法) > </bean>
(2)对于bean的生命周期控制在bean的整个生命周期中所处的位置如下:
- 初始化容器
- 1.创建对象(内存分配)
- 2.执行构造方法
- 3.执行属性注入(set操作)
- ==4.执行bean初始化方法==
- 使用bean
- 1.执行业务操作
- 关闭/销毁容器
- ==1.执行bean销毁方法==
(3)关闭容器的两种方式:
- ConfigurableApplicationContext是ApplicationContext的子类
- close()方法
- registerShutdownHook()方法
4.Bean实例化三种方式
- 无参构造方法实例化(常用)
- 工厂静态方法实例化
<!--静态工厂--> <bean id="userDaoFactory" class="com.xmp.Factory.StaticFactory" factory-method="getUserDao"> </bean>
- 工厂实例方法实例化 FactoryBean(实用)
<!--实例工厂--> <bean id="Factory" class="com.xmp.Factory.DynamicFactory"></bean> <bean id="userDaoFactoryDynamic" factory-bean="Factory" factory-method="getUserDao"></bean>