java-Spring-bean的生命周期

news2024/12/29 14:40:20

定义

程序中的每个对象都有生命周期,对象的创建初始化应用销毁的整个过程称之为对象的生命周期;

在对象创建以后需要初始化,应用完成以后需要销毁时执行的一些方法,可以称之为是生命周期方法;

在spring中,可以通过 @PostConstructt 和 @PreDestroy注解实现 bean对象 生命周期的初始化和销毁时的方法。

  • @PostConstruct 注解

    生命周期初始化方法,在对象构建以后执行。

  • @PreDestroy 注解

    生命周期销毁方法,比如此对象存储到了spring容器,那这个对象在spring容器移除之前会先执行这个生命周期的销毁方法(注:prototype作用域对象不执行此方法)。

 完整生命周期

  1. 实例化阶段(bean对象创建)

    在这个阶段中,IoC容器会创建一个Bean的实例,并为其分配空间。这个过程可以通过构造方法 完成。

  2. 属性赋值阶段

    在实例化完Bean之后,容器会把Bean中的属性值注入到Bean中,这个过程可以通过set方法 完成。

  3. 初始化阶段(bean对象初始化)

    在属性注入完成后,容器会对Bean进行一些初始化操作;

  4. 使用阶段

    初始化完成后,Bean就可以被容器使用了

  5. 销毁阶段

    容器在关闭时会对所有的Bean进行销毁操作,释放资源。

编写Spring的bean对象

package org.example.example;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class Life {
    private  String meaning;
    //实例化
    public Life(){
        System.out.println("1.调用无参数构造进行实例化");
    }
    //属性赋值
    @Value(value="你不知道的世界")
    public void setMeaning( String meaning){
        this.meaning = meaning;
        System.out.println("2.调用set方法进行属性赋值");

    }
    //初始化阶段
    @PostConstruct
    public void init(){
        System.out.println("3.执行生命周期初始化方法");
    }
    //销毁前阶段
    @PreDestroy
    public void destroy(){
        System.out.println("4.执行生命周期的销毁方法");

    }


}

运行测试

package org.example.example;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class LifeTest {

    public static void main(String[] args) {
        // Ctrl + Shift + Alt + c
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("org.example.example");
        Life life = context.getBean(Life.class);
        //使用阶段
        System.out.println("4.开发者使用阶段");
        //关闭IoC容器
        context.close();
    }
}

运行结果 

 

 运用场景

Bean初始化和销毁方法可以在Bean生命周期的特定时机执行自定义逻辑,方便地对Bean进行管理和配置。

  • 初始化常见应用场景
    • 创建数据库连接
    • 加载资源文件
    • 进行数据校验
  • 销毁常见应用场景
    • 断开数据库连接
    • 保存数据
    • 释放占用的资源

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1613678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<计算机网络自顶向下> 可靠数据传输的原理

可靠数据传输(rdt:Reliable Data Transfer)的原理 rdt在应用层,传输层和数据链路层都很重要是网络TOP10问题之一信道的不可靠特点决定了可靠数据传输rdt的复杂性rdt_send: 被上层(如应用层)调用&#xff0…

AI安全之问:我们的智能助手真的安全吗?

在我们日益依赖人工智能来撰写文档、编写程序代码、甚至创作艺术作品的今天,我们是否曾经想过这些智能系统可能面临的被恶意操纵的风险? 分享几个网站 GPT-3.5研究测试: https://hujiaoai.cn GPT-4研究测试: https://higpt4.cn…

【数据结构项目】通讯录

个人主页点这里~ 原文件在gitee里~ 通讯录的实现 基于动态顺序表实现通讯录项目1、功能要求2、代码实现file.hfile.cList.hList.ctest.c 基于动态顺序表实现通讯录项目 准备:结构体、动态内存管理、顺序表、文件操作 1、功能要求 ①能够存储100个人的通讯信息 ②…

刷代码随想录有感(41):二叉树最小深度

题干: 代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), …

CK_Label_V1

CK_Label_v1(电池版) 产品型号 CK_Label_v1 尺寸 37*65*33.7mm 按键 1 指示灯 1 RGB灯(红/绿/蓝/黄/紫/白/青) 外观颜色 白色 供电方式 5号干电池供电1800mAh,可更换电池 通信方式 无线通信 合规认证 CE, RoHS 工作温度 …

FebHost:CC域名商业和非商业使用的区别

在当今互联网的世界中,域名的选择不仅关乎一个网站的在线身份,更与其背后的商业策略紧密相连。.cc 顶级域(TLD)作为众多选择之一,其使用方式可分为商业和非商业两大类。 商业用途:当提及.cc域名的商业用途…

使用yum安装pt-query-digest 并分析MySQL慢查询日志

查看慢SQL日志 1、查看慢日志设置 show variables like slow_query_log%; 2、设置慢日志开关 -- 关闭 SET GLOBAL slow_query_log OFF; -- 开启 SET GLOBAL slow_query_log ON; 3、查看慢日志阈值,即SQL执行时间超过阈值后,才会记录在慢日志文件中 …

Springboot的Test单元测试操作

Springboot的Test单元测试操作 简单总结需要操作的步骤 1&#xff0c;导入依赖 2&#xff0c;创建目录&#xff08;目录和启动类的目录保持一致&#xff09; 3&#xff0c;添加注解 4&#xff0c;写方法测试 1&#xff0c;导入依赖 <dependency><groupId>org.spri…

春游江淮 请来池州 | 3天2晚 您的专属高铁游线路来啦

“快乘高铁 趣游池州”3天2晚高铁游主题线路来喽! 各位旅客朋友请注意,连接九华山、黄山、太平湖“两山一湖”的“黄金旅游线”池黄高铁已进入开通倒计时! 本次列车共设池州、九华山、黄山西、黟县东4站。始发站池州,趁着春意正浓,和我们一起快乘高铁,趣游池州吧! DAY1 上午…

冒泡排序c++

题目描述 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 输入 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 输出 由大到小的n个非负整数&#xff0c;每个数占一行。 样例输入 …

使用 kubeadm 进行证书管理

使用 kubeadm 进行证书管理 一&#xff1a;使用 kubeadm 进行证书管理 1.检查证书是否过期 kubeadm certs check-expiration 2.手动续订证书 使用 kubeadm certs renew 命令 可以随时手动续订证书&#xff0c;该命令使用存储在/etc/kubernetes/pki中的 CA (or front-proxy-…

【JVM常见问题总结】

文章目录 jvm介绍jvm内存模型jvm内存分配参数jvm堆中存储对象&#xff1a;对象在堆中创建分配内存过程 jvm 堆垃圾收集器垃圾回收算法标记阶段引用计数算法可达性分析算法 清除阶段标记清除算法复制算法标记压缩算法 实际jvm参数实战jvm调优jvm常用命令常用工具 jvm介绍 Java虚…

【Flutter】多语言方案一:flutter_localizations 与 GetX 配合版

介绍 多语言方案&#xff1a;flutter_localizations 与 GetX 配合版&#xff0c;好处&#xff1a;命令行生成多语言字符串的引用常量类&#xff0c;缺点&#xff1a;切换语言以后&#xff0c;主界面需要手动触发setState&#xff0c;重绘将最新的Locale数据设置给GetMaterialA…

MKS GM50A MFC GUI 软件使用指南GE50A调零原理及步骤PPT

MKS GM50A MFC GUI 软件使用指南GE50A调零原理及步骤PPT

Datax助力轻松迁移SQLServer数据至GreatSQL

1.环境说明 1.1源端SQLSserver 版本IP端口Microsoft SQL Server 2017192.168.140.1601433 1.2目标端GreatSQL 版本IP端口GreatSQL-8.0.32192.168.139.863308 2.安装环境 2.1安装SQLServer环境 环境说明&#xff1a;借助Docker使用镜像启动数据库 2.1.1安装docker 1.安…

【prometheus】k8s集群部署AlertManager实现邮件和钉钉告警

目录 一、AlertManager概述 1.1 alertmanager简介 1.2 AlertManager核心概念 1.2.1 分组 1.2.2 抑制 1.2.3 静默 1.2.4 客户的行为 1.2.5 高可用性 二、Alertmanager部署邮箱告警 2.1 邮箱配置 2.2 Alertmanager global和route路由配置 2.3 部署prometheus和alertM…

如何熟悉一个陌生的业务系统

目录 一、业务层面 1.1 业务背景 1.2 业务系统概括 1.3 使用情况 1.4 业务流程演练 二、技术层面 2.1 技术架构 2.2 存储层 2.3 系统交互 2.4 运维部署 2.5 系统问题 三、总结 不知道你有没有这样的经历&#xff0c;以前维护某个系统的同事因为某些原因不在维护这个系统了&a…

真实世界的密码学(三)

原文&#xff1a;annas-archive.org/md5/655c944001312f47533514408a1a919a 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十一章&#xff1a;用户认证 本章涵盖了 认证人员和数据之间的区别 用户认证&#xff0c;根据密码或密钥对用户进行身份验证。 用户辅助认…

4.21java聊天室项目小结

基本完成了用户的登录注册功能&#xff0c;可以实现用户账号登录和邮箱登录功能&#xff0c;忘记密码通过邮箱发送验证码找回&#xff0c;注册账号功能&#xff0c;并传递给客户端更新数据库的表内容 注册功能&#xff1a; 注册成功后密码进行MD5加密并通过服务器保存到数据库…

Python 密码学实用指南(全)

原文&#xff1a;zh.annas-archive.org/md5/fe5e9f4d664790ea92fb33d78ca9108d 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 密码学在保护关键系统和敏感信息方面有着悠久而重要的历史。本书将向您展示如何使用 Python 加密、评估、比较和攻击数据。总的来说&…