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

Java Spring Bean的生命周期管理详解

程序员文章站 2022-06-23 10:22:31
目录spring bean的生命周期管理一、spring bean的生命周期二、通过@bean的参数(initmethod ,destroymethod)指定bean的初始化和销毁方法1、项目结构2、...

spring bean的生命周期管理

一、spring bean的生命周期

Java Spring Bean的生命周期管理详解

通过以下方式来指定bean的初始化和销毁方法,
当bean为单例时,bean归spring容器管理,spring容器关闭,就会调用bean的销毁方法
当bean为多例时,bean不归spring容器管理,spring容器关闭,不会调用bean的销毁方法

二、通过@bean的参数(initmethod ,destroymethod)指定bean的初始化和销毁方法

1、项目结构

Java Spring Bean的生命周期管理详解

2、person

public class person {
    public person(){
        system.out.println("person 创建了...");
    }
    public void init(){
        system.out.println("person 初始化了...");
    }
    public void destroy(){
        system.out.println("person 被销毁了...");
    }
}

3、bean注册配置类(单实例)

import com.dashu.bean.person;
import org.springframework.context.annotation.*;
@configuration
public class beanconfig {
    @bean(initmethod = "init",destroymethod = "destroy")
    public person person(){
        return new person();
    }
}

4、测试类

import com.dashu.bean.person;
import com.dashu.config.beanconfig;
import org.springframework.context.annotation.annotationconfigapplicationcontext;
public class main {
    public static void main(string[] args) {
        //加载配置类获取容器
        annotationconfigapplicationcontext annotationconfigapplicationcontext = new annotationconfigapplicationcontext(beanconfig.class);
        //获取bean
        person bean = annotationconfigapplicationcontext.getbean(person.class);
        //关闭容器
        annotationconfigapplicationcontext.close();
    }
}

5、测试结果

Java Spring Bean的生命周期管理详解

6、bean注册配置类(多实例)

import com.dashu.bean.person;
import org.springframework.context.annotation.*;
@configuration
public class beanconfig {
    @scope("prototype")
    @bean(initmethod = "init",destroymethod = "destroy")
    public person person(){
        return new person();
    }
}

7、测试结果

Java Spring Bean的生命周期管理详解

三、bean实现接口initializingbean, disposablebean

1、person

import org.springframework.beans.factory.disposablebean;
import org.springframework.beans.factory.initializingbean;
public class person implements initializingbean, disposablebean {
    public person(){
        system.out.println("person 创建了...");
    }
    @override
    public void afterpropertiesset() throws exception {
        system.out.println("person 初始化了...");
    }
    @override
    public void destroy() throws exception {
        system.out.println("person 被销毁了...");
    }
}

2、bean注册配置类

import com.dashu.bean.person;
import org.springframework.context.annotation.*;
@configuration
public class beanconfig {
    @bean
    public person person(){
        return new person();
    }
}

3、测试结果

Java Spring Bean的生命周期管理详解

四、通过注解@postconstruct和@predestroy

@postconstruct:标注在bean的初始化方法上
@predestroy:标注在bean的销毁方法上

1、person

import javax.annotation.postconstruct;
import javax.annotation.predestroy;
public class person {
    public person(){
        system.out.println("person 创建了...");
    }
    @postconstruct
    public void init(){
        system.out.println("person 初始化了...");
    }
    @predestroy
    public void destroy(){
        system.out.println("person 被销毁了...");
    }
}

2、测试结果

Java Spring Bean的生命周期管理详解

五、使用接口beanpostprocessor实现类(后置处理器)

1、项目结构

Java Spring Bean的生命周期管理详解

2、person

import org.springframework.stereotype.component;
import javax.annotation.postconstruct;
import javax.annotation.predestroy;
@component
public class person {
    public person(){
        system.out.println("person 创建了...");
    }
    @postconstruct
    public void init(){
        system.out.println("person 初始化了...");
    }
    @predestroy
    public void destroy(){
        system.out.println("person 被销毁了...");
    }
}

3、bean注册配置类

import org.springframework.context.annotation.*;
@configuration
@componentscan({"com.dashu"})
public class beanconfig {
}

4、beanpostprocessor实现类(后置处理器)

import org.springframework.beans.beansexception;
import org.springframework.beans.factory.config.beanpostprocessor;
import org.springframework.beans.factory.config.instantiationawarebeanpostprocessor;
import org.springframework.lang.nullable;
import org.springframework.stereotype.component;
/**
 * 后置处理器:初始化前后进行处理工作
 */
@component
public class mybeanpostprocessor implements beanpostprocessor {
    /**
     * 初始化之前工作
     * @param bean
     * @param beanname
     * @return
     * @throws beansexception
     */
    @override
    public object postprocessbeforeinitialization(object bean, string beanname) throws beansexception {
        system.out.println("初始化之前..."+beanname+"=["+bean+"]");
        return bean;
    }
    /**
     * 初始化之后工作
     * @param bean
     * @param beanname
     * @return
     * @throws beansexception
     */
    @override
    public  object postprocessafterinitialization(object bean, string beanname) throws beansexception {
        system.out.println("初始化之后..."+beanname+"=["+bean+"]");
        return bean;
    }
}

5、测试结果

Java Spring Bean的生命周期管理详解

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!