Spring配置文件

Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java EE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。Spring配置文件是一个或多个标准的XML文档,applicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。

Java spring创建配置文件类 创建spring的配置文件_xml

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);

    }

测试结果:

Java spring创建配置文件类 创建spring的配置文件_xml_02

2)当scope的取值为prototype时

  • Bean的实例化个数:多个
  • Bean的实例化时机:当调用getBean()方法时实例化Bean
  • Bean的生命周期:

对象创建:当使用对象时,创建新的对象实例

对象运行:只要对象在使用中,就一直活着

对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了

  • 测试

当测试scope的作用域改为prototype时:

Java spring创建配置文件类 创建spring的配置文件_实例化_03

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-methoddestroy-method属性
  • 类实现InitializingBeanDisposableBean接口,这种方式了解下即可。
<!-- 创建applicationContext.xml -->
    <bean id="userDao" 
    class="com.xmp.dao.impl.UserDaoImpl" 
    scope="prototype" 		
    init-method="init" 			(告诉Spring执行该方法)
    destroy-method="destroy"	(告诉Spring执行该方法)
    >

    </bean>

Java spring创建配置文件类 创建spring的配置文件_Java spring创建配置文件类_04

(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>