请你谈谈: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,一经查实,立即删除!

相关文章

OpenSNN今日快讯:新型 54 轴仿人机器人、中国知网 CNKI 宣布上线新版首页、手搓复现GPT-2最初完整版本

一、科技视频资讯 人工智能】手搓复现GPT-2最初完整版本 | Andrej Karpathy | 8张H100训练24小时 | 成本仅672美元 | llm.c | C/CUDA | AI成本会下降么(2024.7.17) 简介:OpenAI的创始成员、前研究科学家安德烈卡帕西Andrej Karpathy最近又开始…

基于词级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&…

ubuntu23安装tensorRT步骤记录

服务器信息: 1. ssh 连接信息:127.0.0.1 zhangsan2. 操作系统:Ubuntu 23.103. 显卡信息:NVIDIA Corporation GA102 [GeForce RTX 3090]4. cpu 架构:x86_64,13th Gen Intel(R) Core(TM) i9-13900( 使…

2401. 最长优雅子数组

Powered by:NEFU AB-IN Link 文章目录 2401. 最长优雅子数组题意思路代码 2401. 最长优雅子数组 题意 给你一个由 正 整数组成的数组 nums 。 如果 nums 的子数组中位于 不同 位置的每对元素按位 与(AND)运算的结果等于 0 ,则称该子数组为…

微信小程序关于助力微短剧行业高质量发展的公告

微短剧行业已进入高质量发展的新阶段,在国家广播电视总局和广东省广播电视局的指导下,微信小程序平台始终坚持合规先行,主动建设行业管理规范,发布了《微短剧行业管理规范》,全面加强对于微短剧小程序的规范运营要求&a…

北醒单点激光雷达更改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下载…

vue实现f11全屏esc退出全屏

<template><div><p>页面内容</p><el-button type"primary" click"enter_full_screen" v-if"!full">进入</el-button><el-button type"primary" click"exitFullscreen" v-else>退…

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

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

BUUCTF [WUSTCTF2020]朴实无华

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

git代码备份

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

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

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

FPGA-ROM IP核的使用

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

Linux之Mysql索引和优化

一、MySQL 索引 索引作为一种数据结构,其用途是用于提升数据的检索效率。 1、索引分类 - 普通索引(INDEX):索引列值可重复 - 唯一索引(UNIQUE):索引列值必须唯一,可以为NULL - 主键索引(PRIMARY KEY):索引列值必须唯一,不能为NULL,一个表只能有一个主键索引 - 全…

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

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

C#类型基础Part1-值类型与引用类型

C#类型基础Part1-值类型与引用类型 参考资料前言值类型引用类型装箱和拆箱 参考资料 《.NET之美–.NET关键技术深入与解析》 前言 C#中的类型一共分为两类&#xff0c;一类是值类型&#xff08;Value Type&#xff09;,一类是引用类型&#xff08;Reference Type&#xff09…

Java集合的重点

一、Java集合 Java集合包含一组接口和实现类&#xff0c;底层使用不同类型的数据结构&#xff0c;提供不同特点的存储方式&#xff0c;主要分为两大类&#xff1a; Collection单列集合和Map键值对集合。 1.Collection接口用于表示单例集合&#xff0c;主要包括三个子接口&am…

24年支付行业概况与未来

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