在我们实际开发的时候,经常会遇到在Bean在使用之前或者之后做些必要的操作,Spring对Bean的生命周期的操作提供了支持。

在使用Java配置和注解配置下提供如下两种方式:

(1)Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destory-method)。

(2)注解方式:利用JSR-250的@PostConstruct和@PreDestroy。

springboot Bean的初始化和销毁_spring

导入依赖,增加JSR250支持。

<dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>jsr250-api</artifactId>
            <version>1.0</version>
        </dependency>

使用@Bean形式的Bean

NormalBean.java

package com.shrimpking;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/7 22:21
 */
public class NormalBean
{
    public void init()
    {
        System.out.println("NormalBean-init");
    }

    public NormalBean()
    {
        super();
        System.out.println("NormalBean-初始化构造函数");
    }

    public void destroy()
    {
        System.out.println("NormalBean-destroy");
    }
}

使用JSR250形式的Bean

Jsr250Bean.java

package com.shrimpking;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/7 22:23
 */
public class Jsr250Bean
{
    /**
     * PostConstruct,在构造函数执行完之后执行。
     */
    @PostConstruct
    public void initMethod()
    {
        System.out.println("Jsr250Bean-initMethod");
    }

    public Jsr250Bean()
    {
        super();
        System.out.println("Jsr250Bean-构造函数");
    }

    /**
     * PreDestroy,在Bean销毁之前执行。
     */
    @PreDestroy
    public void destroyMethod()
    {
        System.out.println("Jsr250Bean-destroyMethod");
    }
}

代码解释

①@PostConstruct,在构造函数执行完之后执行。

②@PreDestroy,在Bean销毁之前执行。

配置类

PostConfig.java

package com.shrimpking;

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

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/7 22:27
 */
@Configuration
@ComponentScan("com.shrimpking")
public class PostConfig
{
    /**
     * initMethod和destroyMethod指定BeanWayService类
     * 的init和destroy方法在构造之后、Bean销毁之前执行。
     * @return
     */
    @Bean(initMethod = "init",destroyMethod = "destroy")
    NormalBean normalBean()
    {
        return  new NormalBean();
    }

    @Bean
    Jsr250Bean jsr250Bean()
    {
        return new Jsr250Bean();
    }
}

代码解释

①initMethod和destroyMethod指定BeanWayService类的init和destroy方法在构造之后、Bean销毁之前执行。

运行

package com.shrimpking;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


@SpringBootApplication
public class Springboot44InitmethodApplication
{

    public static void main(String[] args)
    {
        //SpringApplication.run(Springboot44InitmethodApplication.class, args);
        AnnotationConfigApplicationContext context
                = new AnnotationConfigApplicationContext(PostConfig.class);

        NormalBean normalBean = context.getBean(NormalBean.class);
        Jsr250Bean jsr250Bean = context.getBean(Jsr250Bean.class);

        context.close();
    }

}

springboot Bean的初始化和销毁_System_02

springboot Bean的初始化和销毁_System_03

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring