Spring Bean生命周期

Spring Bean生命周期

  • 生命周期

生命周期

生命周期过程总概述:
通过构造方法或工厂方法创建bean对象——>为bean属性赋值——>调用 bean 的初始化方法,即init-method指定方法——>bean实例化完毕,可以使用——>容器关闭, 调用 bean 的销毁方法,即destroy-method指定方法。
有关方法如下:

  • init-method:在设置bean的属性后执行的自定义初始化方法
    注意:①、该方法不能有参数;②、对象每创建一次就会执行一次该方法;

  • destroy-method:该参数中的方法只有bean标签属性scope为singleton且关闭Spring IOC容器时才会被调用。
    注意:该方法不能有参数

下边用一个例子说明生命周期

第一步:先搭建出spring工程,见博客如何搭建spring工程
第二步:
创建Student类,代码如下:

package com.zzu.vo;

import java.util.Date;

public class Student {

	private Date date;

	public Date getDate() {
		System.out.println("getter方法");
		return date;
	}

	public void setDate(Date date) {
		System.out.println("setter方法");
		this.date = date;
	}
	
	public Student() {
		System.out.println("构造方法");
	}
	
	public void a() {
		System.out.println("init方法");
	}
	
	public void b() {
		System.out.println("destory方法");
	}
}

complication.xml文件中配置如下信息:



	

Test类中的代码如下:

package com.zzu.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zzu.vo.Student;

public class Test {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("complication.xml");
		Student student=applicationContext.getBean(Student.class);
		System.out.println(student.getDate());
	}
}

运行结果为
Spring Bean生命周期_第1张图片
特别说明:
destory方法的使用:因为destory方法只有bean标签属性scope为singleton且关闭Spring IOC容器时才会被调用,所以此处没有执行,下边配置scope属性关闭Spring IOC容器。
1,配置singleton(单例模式)

2,关闭Spring IOC容器

Student student=applicationContext.getBean(Student.class);
System.out.println(student.getDate());	
applicationContext.close();	//改行代码为关闭Spring IOC容器

输出如下结果
Spring Bean生命周期_第2张图片
init方法:对象每创建一次就会执行一次
1,单例模式下:
其他代码不变,Test中代码如下(省去类和main方法)

ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("complication.xml");
Student student=applicationContext.getBean(Student.class);
System.out.println(student.getDate());

student=applicationContext.getBean(Student.class);
System.out.println(student.getDate());
applicationContext.close();

得到如下结果
Spring Bean生命周期_第3张图片
单例模式下,只是创建一次对象,实例化一次,所以只是执行了一次init方法。
2,prototype模式下:
配置xml中代码如下
在这里插入图片描述
其他代码不变,Test类中代码也不变。
得到如下结果
Spring Bean生命周期_第4张图片
多例模式,创建多次对象,所以实例化多次,但是不会执行destory方法,因为destory方法只有bean标签属性scope为singleton且关闭Spring IOC容器时才会被调用

你可能感兴趣的:(Spring)