Spring5 - Bean的初始化和销毁的4种方式
文章目录
- 概述
- 方式一: 自行指定bean的初始化方法和bean的销毁方法
- 方式二: 通过 InitializingBean和DisposableBean 接口实现bean的初始化以及销毁方法
- 方式三: 通过JSR250规范 提供的注解@PostConstruct 和@ProDestory标注的方法
- 方式四:通过Spring的BeanPostProcessor的 bean的后置处理器会拦截所有bean创建过程
概述
- 针对单实例bean的话,容器启动的时候,bean的对象就创建了,而且容器销毁的时候,也会调用Bean的销毁方法
- 针对原型bean的话,容器启动的时候,bean是不会被创建的而是在获取bean的时候被创建,而且bean的销毁不受 IOC容器的管理.
方式一: 自行指定bean的初始化方法和bean的销毁方法
【beans】
package com.artisan.base.lifeCycle;public class A1 {public void init(){System.out.println("A1 init");}public void destory(){System.out.println("A1 destory");}
}
package com.artisan.base.lifeCycle;public class A2 {public void init(){System.out.println("A2 init");}public void destory(){System.out.println("A2 destory");}
}
【配置类】
package com.artisan.base.lifeCycle;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;@Configuration
public class LCConfig {@Bean(initMethod = "init",destroyMethod = "destory")public A1 a1(){return new A1();}@Scope("prototype")@Beanpublic A2 a2(){return new A2();}
}
【测试】
package com.artisan.base.lifeCycle;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import java.util.concurrent.TimeUnit;/*** @author 小工匠* @version 1.0* @description: TODO* @date 2020/10/11 22:58* @mark: show me the code , change the world*/
public class LCTest {public static void main(String[] args) throws InterruptedException {AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(LCConfig.class);TimeUnit.SECONDS.sleep(3);// 容器销毁ac.close();}
}
方式二: 通过 InitializingBean和DisposableBean 接口实现bean的初始化以及销毁方法
package com.artisan.base.lifeCycle;import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;/*** @author 小工匠* @version 1.0* @description: TODO* @date 2020/10/11 23:06* @mark: show me the code , change the world*/
public class A3 implements InitializingBean, DisposableBean {public A3() {System.out.println("A3 init");}@Overridepublic void destroy() throws Exception {System.out.println("A3 destroy");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("A3 afterPropertiesSet");}
}
执行上面的测试代码
方式三: 通过JSR250规范 提供的注解@PostConstruct 和@ProDestory标注的方法
package com.artisan.base.lifeCycle;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;/*** @author 小工匠* @version 1.0* @description: TODO* @date 2020/10/11 23:12* @mark: show me the code , change the world*/
public class A4 {public A4() {System.out.println("A4 Construct ");}@PostConstructpublic void init(){System.out.println("A4 init");}@PreDestroypublic void destory(){System.out.println("A4 destory");}
}
测试结果
方式四:通过Spring的BeanPostProcessor的 bean的后置处理器会拦截所有bean创建过程
public class A5 {public A5() {System.out.println("A5 Construct");}public void init(){System.out.println("A5 init");}public void destory(){System.out.println("A5 destory");}
}
【bean後置處理器】
package com.artisan.base.lifeCycle;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;public class A5BeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof A5){System.out.println("A5BeanPostProcessor...postProcessBeforeInitialization:"+beanName);}return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof A5){System.out.println("A5BeanPostProcessor...postProcessAfterInitialization:"+beanName);}return bean;}
}
【config】
【test】
简单说一下 BeanPostProcessor的执行时机
看看invokeInitMethods
Spring5 - Bean的初始化和销毁的4种方式相关推荐
- spring-bean生命周期之初始化和销毁的三种方式
1,注解bean之指定init-method/destroy-method 这种方式spring注解之@Bean注解,这边再简单演示如下: 配置类中增加一个bean如下: /*** 定义一个bean对 ...
- spring bean的初始化和销毁
为什么80%的码农都做不了架构师?>>> spring bean的初始化和销毁有3种形式: 1.通过注解@PostConstruct 和 @PreDestroy 方法实现初始化 ...
- spring Bean的初始化和销毁 (使用注解)
使用注解定义Bean的初始化和销毁 Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法. 回顾配置文件的写 ...
- 面试题------Spring中Bean的初始化以及销毁init-method、destory-method
面试题------Spring中Bean的生命周期 通过Spring工厂,可以控制bean的生命周期. 在xml中配置Bean的初始化和销毁方法 通过init-method属性指定初始化后的调用方法. ...
- 手写Spring-第七章-钩直饵咸?虚拟机钩子与bean的初始化和销毁
前言 上一次的练习中,我们主要实现了后置处理器,对bean定义以及bean进行了扩展.那个时候留下了一个坑,也就是bean的[初始化],我们是没有内容的.那么这一次,我们就来填上这个坑.不仅如此,有开 ...
- ApplicationContext和Bean的初始化和销毁
本节来学习ApplicationContext和Bean的初始化和销毁 首先看一下ApplicationContext容器的初始化和销毁关闭过程. ApplicationContext启动的过程是在A ...
- Spring中bean的初始化和销毁几种实现方式详解
关联博文:Spring中Bean的作用域与生命周期 Bean的生命周期 : 创建bean对象 – 属性赋值 – 初始化方法调用前的操作 – 初始化方法 – 初始化方法调用后的操作 – --- 销毁前操 ...
- spring boot之 Bean的初始化和销毁(4)
1.java形式的配置方式:使用@bean的initMethod和destorymethod等同于init-method.destory-method java--Bean(还未交给spring管理) ...
- spring Bean的初始化和销毁生命周期方法
使用注解定义Bean的初始化和销毁 Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法. 回顾配置文件的写 ...
最新文章
- 自动挂载配置本地yum源
- java中的权限修饰符_Java的权限修饰符的区别和用法总结
- 熊猫烧香分析报告_熊猫分析进行最佳探索性数据分析
- 【K8S】Docker向私有仓库拉取/推送镜像报错(http: server gave HTTP response to HTTPS client)
- android支付宝支付开发过程
- vue 图片被背景色覆盖_如何使用纯css3打造有点意思的故障艺术(附React/Vue加强组件版)...
- 用 Python 分析上网记录,发现了很多不可思议的事
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛:I. 丢史蒂芬妮
- ACS与目录服务器进行用户身份控制管理
- 服务器宕机可能的原因以及服务器宕机解决办法
- property中的read,write是什么意思?
- 自动开票失败可能出现的错误信息
- [JNI]开发之旅(7)JNI函数中调用java对象的方法
- devops之 --- git可视化工具sourcetree
- servlet异步请求
- 用Adobe Illustrator将位图转为矢量图并上色
- redies基本数据结构
- MATLAB全局变量
- 图灵工业机器人说明书_从2020世界人工智能大会,看工业机器人领域领军企业布局...
- 电路原理 第一章 电路模型和电路定律(一)
热门文章
- 第六代微型计算机是,AMD Carrizo第六代A系列处理器技术解析
- ubuntu opencv c++ 读取摄像头
- Leetcode 203. 移除链表元素 (每日一题 20210914)
- 知识图谱学习笔记-PageRank
- pytorch笔记 torch.clamp(截取上下限)
- pytorch笔记:实例解析NLLLoss和CrossEntropyLoss
- Linux 运维故障排查思路,有这篇文章就够了
- 深入Python(5):递归
- python面向对象和面向过程的区别_Python11-01_面向对象----面向对象和面向过程的区别...
- win11+AMD的cpu+3060GPU电脑安装 tensorflow-GPU+cuda11+cudnn