【SpringBoot_ANNOTATIONS】 生命周期 01 @Bean指定初始化和销毁方法

bean生命周期:bean创建 – 初始化 – 销毁
容器管理bean的生命周期
可自定义初始化和销毁方法:容器在bean进行到当前生命周期的时候来调用自定义的初始化和销毁方法

package com.example.annotations.bean;

public class Car {
    public Car() {
        System.out.println("car constructor ...");
    }

    /**
     * 做初始化方法
     * 初始化方法不可以有参数 但可以抛异常
     */
    public void init() {
        System.out.println("car init ...");
    }

    /**
     * 做销毁方法
     * 销毁方法不可以有参数 但可以抛异常
     */
    public void destroy() {
        System.out.println("car destroy ...");
    }


}

指定初始化和销毁方法(传统方式)

beans.xml

	<bean id="bean_xml_car" class="com.example.annotations.bean.Car" init-method="init" destroy-method="destroy"/>

使用注解

scope采用默认

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

测试

	    @Test
	    void lifeCycleTest(){
	        //配置类测试
	        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
	        System.out.println("容器创建完毕");
	    }

测试结果

在这里插入图片描述

现在test中容器关闭

@Test
    void lifeCycleTest(){
        //配置类测试
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
        System.out.println("容器创建完毕");
        //关闭容器
        applicationContext.close();
    }

close之后 调用了销毁方法

scope改为prototype

MainConfigOfLifeCycle

@Configuration
public class MainConfigOfLifeCycle {
    @Bean(value = "car4LifeCycle",initMethod = "init" ,destroyMethod = "destroy")
    @Scope("prototype")
    public Car car(){
        return new Car();
    }
}

测试

    @Test
    void lifeCycleTest(){
        //配置类测试
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
        System.out.println("容器创建完毕");
        //关闭容器
        applicationContext.close();
    }

测试结果
在这里插入图片描述

手动获取bean

test


    @Test
    void lifeCycleTest(){
        //配置类测试
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
        System.out.println("容器创建完毕");
        //获取bean
        System.out.println("准备获取bean");
        Object car4LifeCycle = applicationContext.getBean("car4LifeCycle");
        System.out.println("获取完毕");
        //关闭容器
        applicationContext.close();
        System.out.println("容器已关闭");
    }

运行结果
在这里插入图片描述
可看出,prototype下 不会调用销语句

Notes

构造(对象创建)

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

初始化

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

销毁

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

单实例

  1. 容器启动的时候创建对象
  2. 会在创建容器完毕前 获取bean并完成初始化方法
  3. 容器关闭的时候会调用bean的销毁方法

多实例

  1. 容器创建的时候并不会创建或者调用初始化
  2. 每次获取的时候创建对象 调用初始化
  3. 销毁:容器不会管理这个bean,销毁方法不会由容器来调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值