java-Spring-bean的生命周期

news/2024/11/15 4:32:21/

定义

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

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

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对象

java">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方法进行属性赋值");}//初始化阶段@PostConstructpublic void init(){System.out.println("3.执行生命周期初始化方法");}//销毁前阶段@PreDestroypublic void destroy(){System.out.println("4.执行生命周期的销毁方法");}}

运行测试

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

运行结果 

 

 运用场景

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

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

 


http://www.ppmy.cn/news/1436681.html

相关文章

springSecurity简单直接说明

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombo…

基于机器学习的节日大促营销模型

基于机器学习来构建节日大促的营销模型&#xff0c;分为几个步骤&#xff1a; 1. 需求定义 跟业务确定需要建模的目标&#xff08;预计圈选会员数&#xff09;&#xff0c;预计圈选时间以此确定模型交付时间&#xff0c;今年大促的活动周期&#xff08;方便根据同个周期选取去…

服务网关GateWay基础

1. 网关基础介绍1.1 网关是什么1.2 为啥要用网关1.3 常见的网关组件NginxNetflix ZuulSpring Cloud GatewayKongAPISIX综合比较 2. gateWay的使用2.1 springCloud整合gateway2.2 GateWay的相关用法2.3 GateWay路由使用示例基本用法转发/重定向负载请求动态路由 2.5 断言(Predic…

Python与设计模式之桥接模式的那些事儿

内容&#xff1a;将一个事物的两个维度分离&#xff0c;使其都可以独立地变化 应用场景&#xff1a;当事件有两个维度上的表现&#xff0c;两个维度都可能需要扩展时。 话说始皇把打仗的事情交给了皇三&#xff0c;那作为储君的皇大可不能没有什么建树&#xff0c;所于就把国家…

力扣OJ(3000+)

目录 3018. 可处理的最大删除操作数 I 3032. 统计各位数字都不同的数字个数 II 3062. 链表游戏的获胜者 3116. 单面值组合的第 K 小金额 3018. 可处理的最大删除操作数 I 区间DP 3032. 统计各位数字都不同的数字个数 II 给你两个 正整数 a 和 b &#xff0c;返回 闭区间…

C++ 一种交换两个数的思路

在 Lua 或者 Python 中可以使用多值赋值语句来交换两个数。例如&#xff1a;a, b b, a。在 C 中有没有类似的操作&#xff1f; 先解析一下多值赋值的原理&#xff0c;a, b b, a 等价于 t1, t2 b, a a, b t1, t2可以看到多值赋值还是用到了中间变量&#xff0c;而且还是两…

HTML5 服务器发送事件(Server-Sent Events)

参考&#xff1a;HTML5 服务器发送事件(Server-Sent Events) | 菜鸟教程 一&#xff0c;sse介绍 Server-Sent 事件 - 单向消息传递 Server-Sent 事件指的是网页自动获取来自服务器的更新。 以前也可能做到这一点&#xff0c;前提是网页不得不询问是否有可用的更新。通过服务…

C++友元friend

简介&#xff1a;C友元的作用是让外部的对象&#xff08;全局函数、类、类成员函数&#xff09;能够访问到某个类里面的private修饰的数据&#xff0c;因此&#xff0c;必然是使用方法或者函数来操作数据。 1、全局函数做友元 使用全局函数做友元&#xff0c;函数接收一个对象&…