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文件中配置如下信息:

<bean id="date" class="java.util.Date"></bean>
<bean class="com.zzu.vo.Student" init-method="a" destroy-method="b">
	<property name="date" ref="date"></property>
</bean>

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

运行结果为
在这里插入图片描述
特别说明:
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容器

输出如下结果
在这里插入图片描述
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();

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值