Spring Boot 中操作 Bean 的生命周期

1.InitializingBean和DisposableBean

InitializingBean接口提供了afterPropertiesSet方法,用于在bean的属性设置好之后调用;

DisposableBean接口提供了destroy方法,用于在bean销毁之后调用;

public class TestComponent implements InitializingBean, DisposableBean {@Overridepublic void destroy() throws Exception {// 清理代码System.out.println("Bean is destroyed");}@Overridepublic void afterPropertiesSet() throws Exception {// 初始化代码System.out.println("Bean is initialized");}
}
2.PostConstruct和PreDestroy

PostConstruct用于依赖注入完成之后执行初始化方法;

PreDestroy用于在Bean销毁之前执行清理方法

@PostConstructpublic void init(){System.out.println("Bean is init");}@PreDestroypublic void clean(){System.out.println("PreDestroy!");}
3.Bean 定义的 initMethod 和 destroyMethod

通过@Bean注解的两个属性,指定在Bean初始化和销毁的时候执行指定的方法;

@Configuration
public class TestConfig {@Bean(initMethod = "init", destroyMethod = "cleanup")public MyBean myBean() {return new MyBean();}public static class MyBean {public void init() {System.out.println("myBean init");}public void cleanup() {System.out.println("myBean cleanup");}}
}
4.BeanPostProcessor接口

用于在bean初始化之前和初始化之后进行某种操作;主要有两个接口

postProcessBeforeInitialization:bean初始化之前执行某种操作

postProcessAfterInitialization:bean初始化之后执行某种操作

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) {System.out.println("postProcessBeforeInitialization:"+beanName);return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) {System.out.println("postProcessAfterInitialization:"+beanName);return bean;}
}

注意:系统中的所有bean初始化都会调这两个方法;慎重使用

5.ApplicationContextAware和BeanNameAware
ApplicationContextAware提供setApplicationContext,可以获取spring的上下文
BeanNameAware提供setBeanName,可以获取当前bean的名称;
@Component
public class MyAwareBean implements ApplicationContextAware, BeanNameAware {private String beanName;private static ApplicationContext mApplicationContext;@Overridepublic void setBeanName(String name) {this.beanName = name;// 记录 Bean 名称log.info("Bean name set to {}", name);}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {mApplicationContext = applicationContext;}
}
6.FactoryBean

接口定义如下

public interface FactoryBean<T> {String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";@NullableT getObject() throws Exception;@NullableClass<?> getObjectType();default boolean isSingleton() {return true;}
}

作用是生成其他bean,示例:

@Component
public class MyFactoryBean implements FactoryBean<MyFactoryBean.MyCustomBean> {@Overridepublic MyCustomBean getObject() throws Exception {return new MyCustomBean();}@Overridepublic Class<?> getObjectType() {return MyCustomBean.class;}public class MyCustomBean {// 自定义 Bean 的逻辑private String a1 = "test";public String getA1() {return a1;}}
}
7.EnvironmentAware, ResourceLoaderAware

EnvironmentAware提供了setEnvironment,实现了对Environment的操作;

ResourceLoaderAware提供了setResourceLoader,实现了对资源的操作;

@Component
public class MyEnvironmentAwareBean implements EnvironmentAware, ResourceLoaderAware {private Environment environment;private ResourceLoader resourceLoader;@Overridepublic void setEnvironment(Environment environment) {this.environment = environment;}@Overridepublic void setResourceLoader(ResourceLoader resourceLoader) {this.resourceLoader = resourceLoader;}
}
8.BeanFactoryAware

可以获取到BeanFactory,然后操作spring中的bean

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.stereotype.Component;@Component
public class MyBeanFactoryAware implements BeanFactoryAware {private BeanFactory beanFactory;@Overridepublic void setBeanFactory(BeanFactory beanFactory) {this.beanFactory = beanFactory;}
}
9.profile

设置在某个环境时激活某个bean

@Configuration
public class MyConfiguration {@Bean@Profile("dev")public MyBean devMyBean() {System.out.println("MyBean dev");return new MyBean();}@Bean@Profile("prod")public MyBean prodMyBean() {System.out.println("MyBean prod");return new MyBean();}public static class MyBean {// Bean 实现}
}
10.@Lazy、@DependsOn、@Order、@Conditional

Lazy用于延迟加载,当bean被注入的时候才进行加载;

DependsOn声明bean之间的依赖顺序,一个bean的加载依赖另外一个bean,确保一个bean先初始化之后,再加载另外一个bean;通常用来管理bean之间初始化顺序和依赖管理;

order用于bean初始化的顺序;

Conditional基于特定的条件才会创建bean;

import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;@Configuration
public class MyConfiguration {@Bean@Conditional({MyCondition.class})public MyBean myConditionalBean() {return new MyBean();}public static class MyBean {// Bean 实现}public static class MyCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {Environment env = context.getEnvironment();// 定义条件逻辑return env.containsProperty("my.custom.condition");}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextPicker组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextPicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextPicker组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不…

【MySQL】——数据定义

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

蓝桥杯每日一题-----数位dp

前言 今天浅谈一下数位dp的板子&#xff0c;我最初接触到数位dp的时候&#xff0c;感觉数位dp老难了&#xff0c;一直不敢写&#xff0c;最近重新看了一些数位dp&#xff0c;发现没有想象中那么难&#xff0c;把板子搞会了&#xff0c;变通也会变的灵活的多&#xff01; 引入…

基于Python的深度学习的身份证识别考勤系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

如何使用第三方API采集电商数据呢?

电商商家最常唠叨的就是店铺运营难做。每日多平台店铺数据统计汇总繁琐耗时&#xff0c;人工效率偏低&#xff0c;且工作内容有限。 特别是眼下“618&#xff0c;双十一&#xff0c;双十二&#xff0c;年底大促”将至&#xff0c;如何提高运营的效率和质量、保证产品及服务的良…

深度学习-基础过关

众所周知&#xff0c;机器学习是一门跨学科的学科&#xff0c;主要研究计算机如何通过学习人类的行为和思维模式&#xff0c;以实现某些特定的功能或目标。它涉及到概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科&#xff0c;使用计算机作为工具并致力于真实实时的…

大数据信用报告在线查询平台哪个好?

随着大数据技术在金融风控的运用&#xff0c;大数据信用越来越被人熟知&#xff0c;由于线下没有查询大数据信用的地方&#xff0c;想要查询大数据信用报告只有在线上查询&#xff0c;那大数据信用报告在线查询平台哪个好呢?本文贷你一起去了解市面上比较好的三个平台。 大数据…

[自动驾驶算法][从0开始轨迹预测]:三、常用的轨迹预测数据集--Argoverse v2

文章目录 1. 轨迹数据集总览2. Argoverse v2数据集2.1 传感器布局与坐标系统2.2 轨迹预测数据集1. 数据集的下载和读取2. 场景文件的数据结构&#xff1a;3. 地图文件的数据结构 写在前面&#xff1a; “工欲善其事&#xff0c;必先利其器”&#xff01; 在深度学习中&#xff…

x-shell安装、使用以及配置cuda、cudnn和conda

x-shell安装、使用以及安装最新版本conda x-shell安装远程连接服务器conda安装和环境配置 x-shell安装 x-shell是一款终端模拟软件&#xff0c;用于在Windows界面下远程访问和使用不同系统下的服务器。免费版本下载地址&#xff1a; https://www.xshell.com/zh/free-for-home-…

通过ETLCloud CDC构建高效数据管道解决方案

随着企业数据规模的快速增长和多样化的数据&#xff0c;如何高效地捕获、同步和处理数据成为了业务发展的关键。本文将介绍如何利用ETLCloud CDC技术&#xff0c;构建一套高效的CDC数据管道&#xff0c;实现实时数据同步和分析&#xff0c;助力企业实现数据驱动的业务发展。 一…

SpringBoot security 安全认证(一)——登录验证

本节内容&#xff1a;使用springboot自动security模块实现用户登录验证功能&#xff1b; 登录过程如下图&#xff1a; AuthenticationManager内容实现用户账号密码验证&#xff0c;还可以对用户状态&#xff08;启用/禁用&#xff09;&#xff0c;逻辑删除&#xff0c;账号是否…

IPSec VPN与NQA联动实现主备对等体和主备链路快速切换案例

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OC…

java设计模式:策略模式

在平常的开发工作中&#xff0c;经常会用到不同的设计模式&#xff0c;合理的使用设计模式&#xff0c;可以提高开发效率&#xff0c;提高代码质量&#xff0c;提高代码的可拓展性和维护性。今天来聊聊策略模式。 策略模式是一种行为型设计模式&#xff0c;运行时可以根据需求动…

记录 arm 开发板上 nginx 配置 http 服务注意事项

1. 自定义项目&#xff0c;需要在 conf.d 目录中增加一个 .conf 配置文件&#xff1a; server {listen 9200; # 端口号server_name localhost; # 服务名称location / {root /home/imx6q/media; # 项目根目录&#xff08;需要修改 n…

redis布隆过滤器(Bloom)详细使用教程

文章目录 布隆过滤器1. 原理2. 结构和操作3. 特点和应用场景4. 缺点和注意事项 应用-redis插件布隆过滤器使用详细过程安装以及配置springboot项目使用redis布隆过滤器下面是布隆过滤器的一些基础命令 扩展 布隆过滤器 Bloom 过滤器是一种概率型数据结构&#xff0c;用于快速判…

AcWing算法学习笔记:贪心(区间问题 + Huffman树 + 排序不等式 + 绝对值不等式 + 推公式)

贪心 一、区间问题①区间选点②最大不相交区间数量③区间分组④区间覆盖 二、Huffman树&#xff08;合并果子&#xff09;三、排序不等式&#xff08;排队打水&#xff09;四、绝对值不等式&#xff08;货仓选址&#xff09;五、推公式&#xff08;耍杂技的牛&#xff09; 一、…

常见API

文章目录 Math类1.1 概述1.2 常见方法 System类2.1 概述2.2 常见方法 Runtime3.1 概述3.2 常见方法 Object类4.1 概述4.2 常见方法 Objects类5.1 概述5.2 常见方法 BigInteger类6.1 引入6.2 概述6.3 常见方法6.4 底层存储方式&#xff1a; 7 BigDecimal类7.1 引入7.2 概述7.3 常…

leetcode 1.两数之和(C++)DAY1(待补充哈希表法)

文章目录 1.题目描述示例提示 2.解答思路3.实现代码结果4.总结 1.题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&…

猫用空气净化器真的能除菌吗?除毛可以用宠物空气净化器吗?

猫咪给我们带来了无尽的欢乐&#xff0c;但它们换毛时家里到处都是猫毛。我们会在地板、沙发上发现一大堆&#xff0c;甚至衣服也难逃其影响。这些浮毛中可能携带着微生物和尘螨等。对于免疫力较低的老年人、孩子和孕妇来说&#xff0c;他们更容易感染这些微生物。而对于鼻炎患…

openlayers加载天地图

申请天地图key 官方&#xff1a;https://www.tianditu.gov.cn/ 申请key&#xff1a;https://sso.tianditu.gov.cn/login?servicehttps%3A%2F%2Fconsole.tianditu.gov.cn%2F 进去之后&#xff0c;先登录&#xff0c;如果没账号先注册一个就行。 可以创建个应用&#xff0c;…