Spring注解驱动开发之使用@Bean指定初始化和销毁的方法

目录

  • 1. 前言
  • 2. 使用 `@Bean` 指定初始化和销毁的方法
    • 2.1. 注解 `@Bean` 源码
    • 2.2. 创建实体类
    • 2.2. 创建配置类
    • 2.3. 测试结果
  • 3. 初始化和销毁方法调用的时机
    • 3.1. `bean` 的初始化方法调用的时机
    • 3.2. `bean` 的销毁方法调用的时机
  • 4. 自定义初始化和销毁方法的使用场景

1. 前言

通常意义上讲的 bean 的生命周期,指的是 bean 从创建、初始化、属性填充、经过一系列的流程,最终销毁的过程。只不过在 Springbean 的生命周期是由 Spring 容器来管理的,在 Spring 中,我们也可以自己来指定 bean 的初始化和销毁的方法。我们指定了 bean 的初始化和销毁方法之后,当容器在 bean 进行到当前生命周期的阶段时,会自动调用我们自定义的初始化和销毁方法

2. 使用 @Bean 指定初始化和销毁的方法

2.1. 注解 @Bean 源码

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {

	@AliasFor("name")
	String[] value() default {};

	@AliasFor("value")
	String[] name() default {};

	Autowire autowire() default Autowire.NO;

	String initMethod() default "";

	String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
}

没错,就是使用 initMethod 属性和 destroyMethod 属性来指定 bean 的初始化方法和销毁方法的

2.2. 创建实体类

public class Car {
	
	public Car() {
        System.out.println("执行了Car的无参构造器............");
    }

    public void destroy() throws Exception {
        System.out.println("执行了Car的destroy方法............");
    }

    public void init() throws Exception {
        System.out.println("执行了Car的init方法............");
    }
}

2.2. 创建配置类

@Configuration
public class IOCLifeCycleConfig {

    @Bean(initMethod = "init", destroyMethod = "destroy")
    public Car car() {
        return new Car();
    }
}

2.3. 测试结果

@SpringBootTest
@RunWith(value = SpringRunner.class)
public class IOCLifeCycleTest {

    @Test
    public void test01() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(IOCLifeCycleConfig.class);
        Car car = (Car) applicationContext.getBean("car");
        System.out.println(car);

        // 关闭容器
        applicationContext.close();
    }
}

结果如下

Spring注解驱动开发之使用@Bean指定初始化和销毁的方法_第1张图片
可以看到 bean 的销毁方法是在容器关闭的时候被调用的

3. 初始化和销毁方法调用的时机

3.1. bean 的初始化方法调用的时机

bean 的初始化方法调用的时机:对象创建(实例化)完成,如果对象中存在一些属性,并且这些属性也都赋好值之后,那么就会调用 bean 的初始化方法

  • 对于单实例 bean 来说,在 Spring 容器创建完成后,Spring 容器会自动调用 bean 的初始化方法
  • 对于多实例 bean 来说,在每次获取 bean 的时候,会调用 bean 的初始化方法

详情请看这里: https://blog.csdn.net/weixin_38192427/article/details/115213072

3.2. bean 的销毁方法调用的时机

bean 的销毁方法调用的时机

  • 对于单实例 bean 来说,在容器关闭的时候,会调用 bean 的销毁方法
  • 对于多实例 bean 来说,Spring 容器不会管理这个 bean,也就不会自动调用这个 bean 的销毁方法了。不过,可以手动调用多实例 bean 的销毁方法

详情请看这里: https://blog.csdn.net/weixin_38192427/article/details/115213072

4. 自定义初始化和销毁方法的使用场景

一个典型的使用场景就是对于数据源的管理。例如,在配置数据源时,在初始化的时候,会对很多的数据源的属性进行赋值操作;在销毁的时候,我们需要对数据源的连接等信息进行关闭和清理。这个时候,我们就可以在自定义的初始化和销毁方法中来做这些事情了!

你可能感兴趣的:(spring,#,应用,spring)