Bean的初始化和销毁(java配置方式)

2023-05-16

bean生命周期管理

spring对bean的生命周期的操作提供了支持,java配置和注解配置分别使用如下方式:
1、java配置:使用@Bean 的initMethod和destoyMethod
2、注解方式:@PostConstruct和@PreDestroy
java配置是通过@Configuration与@Bean来实现的, spring4.x和springboot都推荐使用java配置,它可以完全替代xml配置
使用 @Configuration 注解表明当前类是一个配置类,这个类里可能有0或多个 @Bean注解。

:为什么不直接用@Component来注入一个bean?
一般情况使用@Component装配Bean,但它只能注解在类上,不能注解在方法上,对于Java而言,大部分的开发都需要引入第三方包,而且往往看不到源码,所以就无法为这些类添加@Component注解让他们变为开发环境的Bean,而spring提供的@Bean注解可以解决这一问题。
使用@Bean 注解标注一个方法(而且只能使用在方法上),表明当前方法的返回值是一个Bean,Bean的名称是方法名,也可以通过name属性设置beanName。如@Bean(name = “dataSource”)
代码如下:

//用@Bean来定义
public class BeanWayService {
    public void init(){
        System.out.println("@Bean-init-method");
    }
    public void destroy(){
        System.out.println("@Bean-destroy-method");
    }
    public BeanWayService(){
        super();
        System.out.println("初始化构造函数。。");
    }
}
//@PostConstruct和@PreDestroy
public class BeanWay2Service {
    @PostConstruct
    public void init(){
        System.out.println("@Bean-postConstruct");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("@Bean-preDestroy");
    }
    public BeanWay2Service(){
        super();
        System.out.println("初始化构造函数。。");
    }
}
@Configuration
@ComponentScan("com.changhf.javaconfig")
public class PrePostConfig {
	//方法一
    @Bean(initMethod = "init", destroyMethod = "destroy")
    BeanWayService beanWayService() {
        return new BeanWayService();
    }
	//方法二
    @Bean
    BeanWay2Service beanWay2Service() {
        return new BeanWay2Service();
    }
}
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PrePostConfig.class);
        context.close();
    }
}

@PostConstruct,在构造函数执行完之后执行;@PreDestroy在bean销毁之前执行
输出结果:

初始化构造函数。。
@Bean-init-method
初始化构造函数。。
@Bean-postConstruct
@Bean-preDestroy
@Bean-destroy-method

@Bean具体用法可以参考:@Bean的具体用法

spring的InitailizingBean与DisposableBean

相比较jdk提供的@PostConstruct,spring还提供里另外一种初始化方式:
实现InitializingBean接口,它仅仅包含一个方法afterPropertiesSet();
实现DisposableBean接口,它仅仅包含一个方法destroy();
虽然使用该接口导致程序和spring的耦合度高,但它代码简洁,对于使用spring的系统来说还是首选。
它为实现该接口的类提供默认的初始化和销毁方法

@Component
public class StudentService implements InitializingBean {
    @Autowired
	private UserService userService;

	@Override
	public void afterPropertiesSet() throws Exception {
		userService.update(1L);
		System.out.println("----------bean initialized-----------");
	}
}

BeanPostProcessor

BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口,可以为每个bean实例化时提供个性化的修改,做些包装等

public interface BeanPostProcessor {
    //bean初始化前执行
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
    //bean初始化后执行
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}

执行步骤:
1、Spring IOC容器实例化Bean
2、调用postProcessBeforeInitialization方法
3、调用bean实例的初始化方法
4、调用postProcessAfterInitialization方法
spring容器通过BeanPostProcessor给了我们一个机会对Spring管理的bean进行再加工。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bean的初始化和销毁(java配置方式) 的相关文章

  • 编译安装Nginx步骤详解

    编译安装Nginx步骤详解 1 xff0c 去Nginx官方网站下载源码包并解压 curl O 或wget 跟下载链接 tar xf 解压 2 xff0c 进入nginx解压后的目录执行 configure configure prefix
  • python2和python3的差异,超详细总结

    python2与python3的区别 1 xff0c 市场差异 python2 xff1a 官方通知python2 2020开始不再维护 xff0c 但企业很多代码都是python2 python2有很大的用户基群故会出现历史遗留问题 xf
  • mysql学习笔记--主从复制

    主从复制简介 首先需要两台机器 xff0c 并且主从复制的前提是需要先做数据同步 xff0c 先在我的master机器上用mysqldump 将所有的数据备份 xff0c 然后scp传输到我的slave机器上 xff0c 然后在slave机
  • mysql学习笔记---sql语句

    基本select查询 1 xff0c 设置系统变量 64 64 sql mode xff0c 有一些限制规则 xff0c 日期不能为0 xff0c 除数不能为0 xff0c 自增不能从0开始 xff0c 授权用户密码不能为空 64 64 s
  • minikube 学习笔记 -- deployment 详解

    minikube 是什么 minikube 可以理解为一个可以运行在本地的 xff0c 单节点的 Kubernetes xff0c 我们可以通过在里面创建 Pods 来创建对应的服务 kubernetes 是什么 Kubernetes 是容
  • minikube 学习笔记 -- service && HPA 详解

    按照下面的文档完成 service 实验 https www cnblogs com backups p k8s 1 html service Service 的作用 xff1a 提供服务的自动发现和负载均衡 因为 Pod 随时会被销毁和重
  • ROS :process has died

    项目场景 xff1a ROS编译报错 问题描述 xff1a 有的时候自己在ROS的框架下写代码会遇到如下的问题 xff1a 以前遇到这种问题基本上心里就觉得凉了 xff0c 因为这种编译之后的运行报错不好定位位置 xff0c 所以之前遇到这
  • PX4无人机-Gazebo仿真实现移动物体的跟踪

    原文链接PX4无人机 Gazebo仿真实现移动物体的跟踪末尾有演示视频 这个学期我们有一个智能机器人系统的课设 xff0c 我们组分配到的题目是 仿真环境下使用无人机及相机跟踪移动物体 xff0c 本文主要记录完成该课设的步骤以及内容 我们
  • nohup 和>/dev/null 2>&1

    一 用途 xff1a nohup表示永久运行 amp 表示后台运行 在应用Unix Linux时 xff0c 我们一般想让某个程序在后台运行 xff0c nohup start mysql sh amp 该命令的一般形式为 xff1a no
  • 【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库

    ROS学习笔记10 ROS中配置自定义Cpp头文件和导入自定义Python库 文章目录 ROS学习笔记10 ROS中配置自定义Cpp头文件和导入自定义Python库一 ROS中的头文件和源文件1 1 自定义头文件调用1 2 自定义源文件调用
  • 【ROS学习笔记13】ROS中的TF坐标变换

    ROS学习笔记13 ROS中的TF坐标变换 文章目录 ROS学习笔记13 ROS中的TF坐标变换前言1 静态坐标变换2 动态坐标变换3 多坐标变换4 坐标系关系查看5 TF坐标变换实操Reference 写在前面 xff0c 本系列笔记参考
  • Android---bitmap优化

    目录 Bitmap 占用内存大小计算 Bitmap Drawable InputStream Byte 之间进行转换 Bitmap 相关方法 BitmapFactory 工厂类 Bitmap 占用内存大小计算 Bitmap 作为位图 xff
  • Linux的基础命令

    一 切换用户 su 用户名 1 切换管理员用户root 需要输入登录时的密码password 密码不显示 2 切换回普通用户 不需要输入密码password 二 目录操作 1 切换目录 1 cd 切换到系统根目录 2 cd 切换到当前用户的
  • uC/OS_II操作系统移植,亲测可用

    uC OS II简介 uC OS II由Micrium公司提供 xff0c 是一个可移植 可固化的 可裁剪的 占先式多任务实时内核 xff0c 它适用于多种微处理器 xff0c 微控制器和数字处理芯片 xff08 已经移植到超过100种以上
  • 树莓派开机出现正确密码循环输入的问题

    树莓派开机出现正确密码无限循环输入的问题 问题状况 树莓派开机后在登录界面输入正确密码后 xff0c 屏幕闪了一下然后还要输入密码 无限循环该现象 问题出现背景 在上一次关机之前进行了Tomcat等环境变量的配置 问题原因 就是最近的一次操
  • 机器人技术(RoboCup 2D)如何进行一场球赛

    合工大RoboCup 2D主要函数注释 以及 机器人技术实验五十题代码已更新 博文连接如下 博文连接点这里 进行一场球赛 xff1a 畅所欲言 欢迎交流 1 启动服务器 打开终端 xff0c 输入rcssserver xff08 tab键自
  • React几种传递参数的方法

    1 父组件向子组件传参 回调函数也是参数的一种 xff0c 也可以传给子组件 xff0c 达到子组件控制父组件的目的 import React from 39 react 39 import ReactDOM from 39 react d
  • Git拉取项目,拉取git更新后的项目

    1 首次拉取git上的项目 这里以idea2020 1展示 1 首先在git上找到克隆链接 2 复制链接之后 回到idea 找到VCS gt Get from Version Control Clone就可以 2 拉取git更新后的项目 第
  • 如何轻松的完成属于自己的一架无人机(免费领取PCB)

    64 翼风室内有刷F1飞控教程 本篇博客的目的 为了让各位无人机爱好者轻松的制作一架属于自己的无人机 xff0c 本篇文章基于翼风室内有刷F1飞控板 xff0c 围绕接口介绍以及使用教程展开介绍 xff0c 希望大家喜欢 xff0c 废话不
  • linux下jps命令找不到的问题

    jps是用来查看进程的命令 搭建rocketmq时 xff0c 常常要用jps来查看名称服务是否已启动 xff0c 但是某些机器报错如下 xff1a bash jps command not found 解决办法如下 xff1a 一 检查基

随机推荐

  • 如何轻松的完成属于自己的一架无人机下篇——调参(免费领取PCB)

    如何轻松的完成属于自己的一架无人机下篇 调参 xff08 免费领取PCB xff09 64 翼风室内有刷F1飞控教程 xff08 QQ群 xff1a 708260375 xff09 本篇博客的目的 上篇主要针对需要的材料以及硬件教程进行了教
  • copy outerHTML、python爬取csdn文章、一键打包个人csdn文章保存到本地

    文章目录 1copy outerHTML复制网站源码法1 1复制源码1 2 遇到的问题 2 python爬取CSDN博客文章 xff08 保存为html xff0c txt xff0c md xff09 2 1 安装依赖2 2 完整代码 3
  • 一、视觉SLAM基础概述

    视觉SLAM主要是以视觉为传感器 xff0c 解决定位与建图的问题 xff0c 其主要可以分为前端 后端 回环检测和建图等四个部分 xff0c 其中各个部分的作用分别为 xff1a xff08 1 xff09 前端 xff1a 前端也称为视
  • HAL库 MPU6050的使用

    HAL库 amp amp MPU6050 HAL库 MPU6050的使用 xff1a 今天在本教程中 xff0c 我们将使用STM32接口MPU6050 xff08 GY 521 xff09 加速度计陀螺仪 同时 xff0c 我将在PC上利
  • HAL库 AB相编码器

    HAL库 AB相编码器 文章涉及Cube MX的配置 Keil代码的编写以及模板存放之BaiDu Pan 用到的软件 xff1a STM32CubeMX amp Keil 5 用到的硬件 xff1a 光电式编码器 F411RE NUCLEO
  • CUBLI 简化 一维模型(有bug)

    CUBLI 简化 一维模型 xff08 有bug xff09 文章目录 CUBLI 简化 一维模型 xff08 有bug xff09 前言一 CUBLI是什么 xff1f 二 制作步骤1 MPU6050 amp amp 编码器操作2 什么是
  • 阻滞增长模型--Logistic模型

    文章目录 写在前面一 思路二 原始数据三 源代码四 结果 写在前面 做了一个作业 xff0c 觉得挺有意思 xff0c 有空就发上来了 阻滞增长模型 Logistic模型的部分推导 思路 xff0c 并给出参考代码 参考书籍 xff1a 数
  • Linux 图形化Git客户端

    Linux用户主要可以通过命令行来管理Git xff0c 不过外面有几种图形化用户界面 xff08 GUI xff09 Git客户软件 xff0c 它们便于用户在Linux桌面上高效 可靠地使用Git xff0c 即便提供不了所有命令行操作
  • .yml文件语法

    项目里用到yml文件作为配置文件 xff0c 了解下其实挺简单 xff0c 它的基本语法如下 大小写敏感使用缩进表示层级关系缩进时不允许使用Tab键 xff0c 只允许使用空格 缩进的空格数目不重要 xff0c 只要相同层级的元素左侧对齐即
  • 嵌入式总线协议(二)——RS232、RS485

    定义 RS232 RS485为电气层 xff08 物理层 xff09 协议 xff0c 依赖于串口 xff08 UART xff09 存在 xff0c 在电气层进行优化处理 xff0c 达到提高抗干扰能力 提高传输速度 增大传输距离的效果
  • 测试TensorFlow的GPU版本安装成功方法

    程序如下 xff1a import tensorflow as tf print 39 GPU 39 tf test is gpu available a 61 tf constant 2 b 61 tf constant 4 print
  • 深度学习数据集下载

    猫狗识别数据集 链接 xff1a https pan baidu com s 1vQcmQts1jIi5 oA6O411aA amp shfl 61 sharepset 提取码 xff1a 5si6 MNIST数据集 链接 xff1a ht
  • PyTorch版本检测及GPU是否安装成功检测

    PyTorch GPU版本安装方法 xff0c 请看anaconda虚拟环境下镜像安装PyTorch 利用jupyter notebook访问虚拟环境 检测程序如下 xff1a span class token keyword import
  • 树莓派 | 摄像头模块的使用方法

    如果觉得本篇文章对您的学习起到帮助作用 xff0c 请 点赞 43 关注 43 评论 xff0c 留下您的足迹 x1f4aa x1f4aa x1f4aa 在此项目中 xff0c 将了解如何使用树莓派摄像头模块进行拍照 xff0c 录制视频等
  • 树莓派小实验 | 制作一个带快门的照相机 & 录像机

    如果觉得本篇文章对您的学习起到帮助作用 xff0c 请 点赞 43 关注 43 评论 xff0c 留下您的足迹 x1f4aa x1f4aa x1f4aa x1f4aa 在此项目中 xff0c 通过连接GPIO引脚的按钮控制拍照 xff0c
  • Jetson Nano 关机、重启命令

    如果觉得本篇文章对您的学习起到帮助作用 xff0c 请 点赞 43 关注 43 评论 xff0c 留下您的足迹 x1f4aa x1f4aa x1f4aa 1 重启命令 xff1a span class token function sudo
  • python保存虚拟环境requirement.txt

    保存 pip freeze span class token operator gt span requirement txt 安装 pip span class token function install span r requirem
  • python虚拟环境移植到另一台电脑

    如果觉得本篇文章对您的学习起到帮助作用 xff0c 请 点赞 43 关注 43 评论 xff0c 留下您的足迹 x1f4aa x1f4aa x1f4aa 本篇文章为python环境打包离线安装移植的所做笔记 xff0c 一是为了日后查找方便
  • python安装jupyter lab和使用插件

    如果觉得本篇文章对您的学习起到帮助作用 xff0c 请 点赞 43 关注 43 评论 xff0c 留下您的足迹 x1f4aa x1f4aa x1f4aa 本篇文章为python安装jupyter lab和使用插件的所做笔记 xff0c 一是
  • Bean的初始化和销毁(java配置方式)

    bean生命周期管理 spring对bean的生命周期的操作提供了支持 xff0c java配置和注解配置分别使用如下方式 xff1a 1 java配置 xff1a 使用 64 Bean 的initMethod和destoyMethod 2