请你谈谈:spring bean的生命周期 - 阶段4:检查Aware相关接口

在Spring框架中,Aware 接口系列提供了一种机制,允许bean在初始化过程中感知到容器中的特定对象,如应用上下文(ApplicationContext)、Bean工厂(BeanFactory)等。如果你有一个用户自定义的对象,它需要在运行时访问Spring容器中的其他对象或资源,你可以通过实现一个或多个Aware接口来实现这一点。Spring容器在bean的初始化过程中会自动检测并注入这些依赖。

以下是一个具体的例子,说明如何通过实现ApplicationContextAware接口来让自定义bean感知到Spring的ApplicationContext,从而可以访问容器中的其他bean。

步骤 1: 定义一个需要注入ApplicationContext的Bean

首先,我们定义一个简单的Bean,它实现了ApplicationContextAware接口。在这个接口的实现中,我们将ApplicationContext保存为一个实例变量,以便后续使用。

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;public class MyBean implements ApplicationContextAware {private ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}// 使用applicationContext获取其他beanpublic void doSomething() {// 假设我们有一个名为"someOtherBean"的bean需要被访问SomeOtherBean someOtherBean = applicationContext.getBean("someOtherBean", SomeOtherBean.class);// 使用someOtherBean做一些事情someOtherBean.performAction();}
}

步骤 2: 定义另一个Bean供MyBean使用

public class SomeOtherBean {public void performAction() {System.out.println("SomeOtherBean is performing an action.");}
}

步骤 3: 配置Spring上下文

在你的Spring配置文件中(无论是XML配置还是Java配置),你需要确保MyBeanSomeOtherBean都被Spring容器管理。

Java配置示例(使用@Configuration@Bean
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic MyBean myBean() {return new MyBean();}@Beanpublic SomeOtherBean someOtherBean() {return new SomeOtherBean();}
}
package com.zhaoshu.aware;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;  public class MyBeanMainTest {  public static void main(String[] args) {  // 创建并启动Spring应用程序上下文  ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);  // 从上下文中获取MyBean的实例  MyBean myBean = context.getBean(MyBean.class);  // 调用MyBean的方法  myBean.doSomething();  // 关闭Spring应用程序上下文(可选,但在生产代码中是个好习惯)  ((AnnotationConfigApplicationContext) context).close();  }  
}
SomeOtherBean is performing an action.

总结

通过实现ApplicationContextAware接口,你的bean能够感知到Spring的ApplicationContext,从而可以访问容器中的其他bean或资源。这是一种灵活的方式来解耦你的应用组件,并允许它们在运行时根据需要动态地查找和使用其他组件。然而,需要注意的是,过度使用这种方式可能会增加组件之间的耦合度,因此在设计应用时应谨慎使用。

在这里插入图片描述

例如ApplicationContext继承自ResourceLoader和MessageSource,那么当我们实现ResourceLoaderAware和MessageSourceAware相关接口时,就将其自身注入到业务对象中即可。

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

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

相关文章

基于词级ngram的词袋模型对twitter数据进行情感分析

按照阿光的项目做出了学习笔记,pytorch深度学习实战项目100例 基于词级ngram的词袋模型对twitter数据进行情感分析 什么是 N 符? N 格是指给定文本或语音样本中 n 个项目的连续序列。这些项目可以是音素、音节、字母、单词或碱基对,具体取…

php 存储复杂的json格式查询(如:经纬度)

在开发中,有时我们可能存了一些复杂json格式不知道怎么查。我这里提供给大家参考下: 一、先上表数据格式(location字段的possiton经纬度以逗号分开的) {"title":"澳海文澜府","position":"11…

redis高可用之主从复制、哨兵以及Cluster集群

目录 一、Redis主从复制 1)主从复制的作用 2)主从复制流程 3)搭建Redis主从复制 1、部署redis服务器 2、修改Redis配置文件(所有节点操作) 3、验证主从复制结果 二、哨兵模式 1)哨兵的作用 2&…

北醒单点激光雷达更改id和波特率以及Ubuntu20.04下CAN驱动

序言: 需要的硬件以及软件 1、USB-CAN分析仪使用顶配pro版本,带有支持ubuntu下的驱动包的,可以读取数据。 2、电源自备24V电源 3、单点激光雷达接线使用can线可以组网。 一、更改北醒单点激光雷达的id号和波特率 安装并运行USB-CAN分析仪自带…

elasticsearch8.14.1集群安装部署

elasticsearch安装部署,首先需要准备至少三台服务器,本例再windows11下安装三台vmware虚拟机,利用centOS7系统模拟服务器环境。 本例假设你已经安装了三台vmware和centOS7,且centOS7运行正常。接下来我们直接讲解elasticsearch下载…

SQL实战宝典:快速上手数据库查询与优化

文章目录 SQL 速成手册SQL 的主要功能1、基本查询语句2、表操作语句3、数据操作语句4、函数与聚合操作5、子查询与联接6、高级操作7、性能优化与安全性 基本查询语句表操作语句数据操作语句函数与聚合操作子查询与联接高级操作性能优化与安全性 SQL 速成手册 SQL(S…

BUUCTF [WUSTCTF2020]朴实无华

首先进来不知道要干啥,上dirsearch扫出个机器人协议,一看有点东西 直接访问很明显这不是flag 主页面看他说什么不能修改头部,看一下数据包 发现了好东西 看到源码,又得绕过了。不过这编码有点问题导致乱码了 找个在线网站稍微恢复…

git代码备份

终端备份常用指令 git reflog //查看更新 git add filename //提交修改 git commit -m "20240825修改" //备注修改 git reset --hard 1094a //回退版本 exit …

【深入理解SpringCloud微服务】深入理解Eureka核心原理

深入理解Eureka核心原理 Eureka整体设计Eureka服务端启动Eureka三级缓存Eureka客户端启动 Eureka整体设计 Eureka是一个经典的注册中心,通过http接收客户端的服务发现和服务注册请求,使用内存注册表保存客户端注册上来的实例信息。 Eureka服务端接收的…

FPGA-ROM IP核的使用

1.理论 ROM全称:Read-Only Memory,也就是只读型固态半导体存储器,即一旦存储信息,无法再改变,信息也不会因为电源关闭消失。但在FPGA中,实际使用的ROM IP核并不是真正的ROM,其实都是内部的RAM资…

spring security如何适配盐存在数据库中的密码

19.token认证过滤器代码实现_哔哩哔哩_bilibili19.token认证过滤器代码实现是SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权-挑战黑马&尚硅谷的第20集视频,该合集共计41集,视频收藏或关注UP主,及时了解更多相关视…

24年支付行业概况与未来

​ 一、行业背景介绍 支付行业作为现代金融体系的基石,正经历着前所未有的变革。随着科技的发展和人们对便捷支付方式的需求不断提高,支付行业在近年来得到了迅猛发展。在我国,支付行业经过多年的发展和市场竞争,已经形成了多元化…

Navicat 17 新特性 | Navicat BI 功能革新升级,助力企业深度挖掘数据潜能

随着 Navicat 17 的发布,在业界引起了广泛的共鸣与热议。我们曾深入剖析其众多革新特性,包括模型设计创新与优化、高效的查询与配置、用户界面交互体验再升级,原生适配国产平台和操作系统和数据字典提升数据结构清晰度,这些新特性…

【第12章】Spring Cloud之集成 Spring Cloud Gateway

文章目录 前言一、新建项目1. 项目结构2. 引入依赖3. 启动类4. 基本配置 二、新建配置三、新建服务1. 提供者2. 消费者 四、单元测试1. 启动网关服务2. 提供者3. 消费者 总结 前言 Spring Cloud Gateway是一个基于Spring Framework 5、Spring Boot 2和Project Reactor等技术构…

python的csv库常用操作

csv 模块是 Python 标准库中的一个模块,用于处理 CSV(逗号分隔值)文件。它提供了简单易用的功能来读取和写入 CSV 文件。以下是一些常用的操作: 一、读取 CSV 文件 新建文件data.csv,内容如下: 使用 csv.…

浪潮自研交换机系列常见问题处理

CN61108PC-V-H 不能PING通任何地址,也不能被PING 输入ip traceroute enable既可。注意视图 交换机通过console口远程登录至其他交换机,掉线后console口无法使用 例如有2台交换机A和B,在A交换机上插上console线登录后,在A通过SSH…

nodejs安装及环境配置建材商城管理系统App

✌网站介绍:✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围:Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容:免费功能设计、免费提供开题答辩P…

如何应对Android面试官 -> 常用数据结构如何进行优化

前言 本章我们开始讲解性能优化相关的话题,首先我们来看下数据结构如何优化: 性能优化 性能优化的本质:线上 APM 的性能监控,而性能监控通常是以下技术点 ByteCode、Hook(PLT Hook)、JS注入(采…

tslib 库-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

tslib 库 tslib 简介 tslib 库,这是 Linux 系统下,专门为触摸屏开发的应用层函数库,开源 功能与作用:作为触摸屏驱动和应用层之间的适配层,封装了读取和解析触摸屏数据的复杂过程,提供API接口 数据处理&…

c++ 高精度加法(只支持正整数)

再给大家带来一篇高精度,不过这次是高精度加法!话不多说,开整! 声明 与之前那篇文章一样,如果看起来费劲可以结合总代码来看 定义 由于加法进位最多进1位,所以我们的结果ans[]的长度定义为两个加数中最…