【Spring Boot】Spring基础 —— Bean的初始化和销毁

Bean的初始化和销毁


文章目录

      • 1.概述
      • 2.添加支持
      • 3.新建包和相关类文件
      • 4.Java配置方式(采用@Bean形式的Bean)
      • 5.注解方式(使用JSR250形式的Bean)
      • 6.配置类
      • 7.测试主类Main
      • 8.测试




1.概述

在我们实际开发的时候,经常会遇到Bean在使用之前或者之后做些必要的操作,Spring对Bean的生命周期的操作提供了支持。在使用Java配置和注解配置下提供如下两种方式:
(1)Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destory-method)。
(2)注解方式:利用JSR-250的@PostConstruct和@PreDestroy。

下面我们将通过一个简单的例子来演示上面这两种对Bean的生命周期的操作。




2.添加支持

我们首先需要在pom.xml文件中加入以下代码,从而添加JSR250支持

<!-- JSR250 支持 -->
<dependency>
	<groupId>javax.annotation</groupId>
	<artifactId>javax.annotation-api</artifactId>
	<version>1.3.2</version>
</dependency>



3.新建包和相关类文件

这里我们需要在"src/main/java/com/study/spring/“下建立一个新的包"ch2.prepost”,然后再在这个包中新建4个类,结构如下图所示:
【Spring Boot】Spring基础 —— Bean的初始化和销毁_第1张图片



4.Java配置方式(采用@Bean形式的Bean)

类BeanWayService,其内容如下:

package com.study.spring.ch2.prepost;

public class BeanWayService {
    public void init(){
        System.out.println("@Bean-init-method");
    }

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

    public void destroy(){
        System.out.println("@Bean-destroy-method");
    }
}



5.注解方式(使用JSR250形式的Bean)

类JSR250WayService,其内容如下:

package com.study.spring.ch2.prepost;

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

public class JSR250WayService {
    @PostConstruct                  //在构造函数执行完之后执行
    public void init(){
        System.out.println("jsr250-init-method");
    }

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

    @PreDestroy                     //在Bean销毁前执行
    public void destroy(){
        System.out.println("jsr250-destroy-method");
    }
}



6.配置类

类PrePostConfig,其内容如下:

package com.study.spring.ch2.prepost;

import org.springframework.context.annotation.Bean;

public class PrePostConfig {
    //initMethod和destroyMethod指定BeanWayService类的init和destroy方法在构造函数之后、Bean销毁之前执行
    @Bean(initMethod = "init",destroyMethod = "destroy")
    BeanWayService beanWayService(){
        return new BeanWayService();
    }

    @Bean
    JSR250WayService jsr250WayService(){
        return new JSR250WayService();
    }
}



7.测试主类Main

最后是测试主类Main,其内容如下:

package com.study.spring.ch2.prepost;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PrePostConfig.class);
        BeanWayService beanWayService = context.getBean(BeanWayService.class);
        JSR250WayService jsr250WayService =context.getBean(JSR250WayService.class);
        context.close();
    }
}



8.测试

接下来我们选择刚刚建立的测试主类Main文件,右键,在弹出的窗体中选择"Run",效果如下:
【Spring Boot】Spring基础 —— Bean的初始化和销毁_第2张图片
该结果验证了:
1.在Java配置方式下,使用@Bean的initMethod和destroyMethod方法(相当于xml配置的init-method和destory-method)能够分别将指定函数设在构造函数之后,析构函数之前执行。
2.在注解方式下,使用JSR-250的@PostConstruct和@PreDestroy方法能够分别将指定函数设在构造函数之后,析构函数之前执行。




你可能感兴趣的:(Spring,Boot,#,Spring,基础,Bean的初始化和销毁,initMethod方法,destroyMethod方法,Spring基础,Spring,Boot)