欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring注册组件——@Bean的生命周期(指定初始化和销毁方法)示例

程序员文章站 2022-06-03 08:50:31
...

一、bean的生命周期:

  • bean创建的过程
  • bean初始化的过程
  • bean销毁的过程

二、构造(对象创建)

  • 单实例:在容器启动的时候创建对象
  • 多实例:在每次获取的时候创建对象

三、bean的初始化

  • 对象创建完成,并赋值好,调用初始化方法

四、bean的销毁

  • 单实例:容器关闭的时候
  • 多实例:容器不会管理这个bean;容器不会调用销毁方法

五、指定bean的初始化和销毁方法

  • 通过@Bean指定init-method和destroy-method

六、单实例指定初始化和销毁方法示例

1、创建一个maven项目(创建maven项目过程省略),pom.xml文件引入如下依赖:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<scope>test</scope>
</dependency>

2、创建一个Milk的实体类,代码如下:

package com.rf.bean;

/**
 * 创建一个牛奶的实体类
 * */
public class Milk {
	
	public Milk(){
		System.out.println("执行了Milk类的无参数构造方法");
	}
	
	public void init(){
		System.out.println("执行了初始化方法。。。。。");
	}
	
	public void destry(){
		System.out.println("执行了销毁方法。。。。。");
	}
}

3、编写配置类,代码如下:

package com.rf.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

import com.rf.bean.Milk;

@Configuration
public class Myconfig {
	
	@Scope("singleton")//不写@Scope("singleton")默认单实例
	//通过@Bean指定init-method和destroy-method
	@Bean(initMethod="init",destroyMethod="destry")
	public Milk milk(){
		return new Milk();
	}
}

4、编写测试类,代码如下:

package com.rf.test;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.rf.config.Myconfig;

public class Test1 {
	
	@org.junit.Test	
	public void test04(){
		
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Myconfig.class);
		System.out.println("ioc容器创建完成了。。。。");
		
		//关闭容器执行销毁方法
		ctx.close();
		
	}
}

5、启动测试类,运行效果如下:
spring注册组件——@Bean的生命周期(指定初始化和销毁方法)示例

七、多实例指定初始化和销毁方法示例

1、创建一个maven项目(创建maven项目过程省略),pom.xml文件引入如下依赖:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<scope>test</scope>
</dependency>

2、创建一个Milk的实体类,代码如下:

package com.rf.bean;

/**
 * 创建一个牛奶的实体类
 * */
public class Milk {
	
	public Milk(){
		System.out.println("执行了Milk类的无参数构造方法");
	}
	
	public void init(){
		System.out.println("执行了初始化方法。。。。。");
	}
	
	public void destry(){
		System.out.println("执行了销毁方法。。。。。");
	}
}

3、编写配置类,代码如下:

package com.rf.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

import com.rf.bean.Milk;

@Configuration
public class Myconfig {
	
	@Scope("prototype")//指定多实例
	//通过@Bean指定init-method和destroy-method
	@Bean(initMethod="init",destroyMethod="destry")
	public Milk milk(){
		return new Milk();
	}
}

4、编写测试类,代码如下:

package com.rf.test;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.rf.config.Myconfig;

public class Test1 {
	
	@org.junit.Test	
	public void test04(){
		
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Myconfig.class);
		System.out.println("ioc容器创建完成了。。。。");
		System.out.println("----------------------");
		Object bean = ctx.getBean("milk");//调用时创建对象
		System.out.println("----------------------");
		Object bean1 = ctx.getBean("milk");//调用时创建对象
		//关闭容器执行销毁方法
		ctx.close();
		
	}
}

5、启动测试类,运行效果如下:
spring注册组件——@Bean的生命周期(指定初始化和销毁方法)示例