Spring中Bean的初始函数和消亡函数

文章目录

    • bean的初始和消亡函数
      • 1、初始函数:实现 InitializingBean 接口
      • 2、初始函数:自定义方法添加 bean 的依赖关系注入之后的行为(此时需要修改xml文件
      • 3、单例与多例bean时初始函数的调用时机
      • 4、消亡函数:实现DisposableBean接口
      • 5、消亡函数:自定义方法添加 bean 销毁之前的行为(此时需要修改xml文件

bean的初始和消亡函数

1、初始函数:实现 InitializingBean 接口

package com.homework.bean;

import org.springframework.beans.factory.*;

public class ItemOrder implements IItemOrder,InitializingBean {
     
	……
	@Override
	public void afterPropertiesSet() throws Exception {
     
		// TODO Auto-generated method stub
		System.out.println("正在执行初始化方法 afterPropertiesSet...");
	}
}

2、初始函数:自定义方法添加 bean 的依赖关系注入之后的行为(此时需要修改xml文件

package com.homework.bean;

public class ItemOrder implements IItemOrder {
     
	……
	public void init() {
     
		System.out.println("正在执行初始化方法 init...");
	}
}

在xml文件中添加init-method:

<bean id="itemOrder1" class="com.homework.bean.ItemOrder" init-method="init">
		<property name="numItems">
			<value>1value>
		property>
		<property name="item">
			<ref bean="item1" />
		property>
	bean>

3、单例与多例bean时初始函数的调用时机

工程启动后就直接运行afterPropertiesSet,Spring总是先处理bean定义的InitializingBean,后处理init-method。如果在Spirng处理InitializingBean时出错,那么Spring将直接抛出异常,不会再继续处理init-method。

如果一个bean被定义为非单例的,那么afterPropertiesSet和init-method在bean的每一个实例被创建时都会执行。单例 bean的afterPropertiesSet和init-method只在bean第一次被实例时调用一次。

Struts2的Action是多实例的,也即每次请求产生一个Action的对象。Action类中往往包含了数据属性,例如在页面填写的form表单的字段,Action中有对应的的属性来绑定页面form表单字段。

SpringMVC默认是单例的。与Action不同,SpringMVC的Controller中不定义属性,而是用方法的参数接收值,一个方法结束形参就销毁了,多线程访问都会有一块内存空间产生,里面的参数也是不会共用的。


另:
init-method是通过反射执行的,而afterPropertiesSet是直接执行的。所以 afterPropertiesSet的执行效率比init-method要高,不过init-method消除了bean对Spring依赖。

4、消亡函数:实现DisposableBean接口

package com.homework.bean;

import org.springframework.beans.factory.*;

public class ItemOrder implements IItemOrder,DisposableBean {
     
	……
	@Override
	public void destroy() throws Exception {
     
		// TODO Auto-generated method stub
		System.out.println("正在执行销毁方法destroy...");
	}
}

5、消亡函数:自定义方法添加 bean 销毁之前的行为(此时需要修改xml文件

package com.homework.bean;

public class ItemOrder implements IItemOrder {
     
	……
	@Override
	public void myDestroy() throws Exception{
     
		System.out.println("正在执行自定义销毁方法myDestroy...");
	}
}

在xml文件中添加destroy-method

<bean id="itemOrder1" class="com.homework.bean.ItemOrder" destroy-method="myDestroy">
		<property name="numItems">
			<value>1value>
		property>
		<property name="item">
			<ref bean="item1" />
		property>
	bean>

你可能感兴趣的:(ssh,spring,java,后端)