spring aware 接口源码浅析

Spring Aware接口执行时机源码深度解读 Spring Aware接口执行时机源码深度解读 Spring中有这样一种标记接口的存在Aware,只要是spring管理的bean实现了Aware接口,那么spring就会在bean创建的某个时机将相应的资源注入到该spring bean中,比如ApplicationContextAware, 会将spring 应用上下文ApplicationContext自动注入到bean中。 //Sprin... 阅读详情

先来看下aware的官方注释

Marker superinterface indicating that a bean is eligible to be
notified by the Spring container of a particular framework object
through a callback-style method. Actual method signature is
determined by individual subinterfaces, but should typically
consist of just one void-returning method that accepts a single
argument.

简单概括下意思是,标记这个接口的实现类能被spring容器框架的类通过回调方法“提醒”,具体的方法每个单独的子接口都不同,但是典型的组成是由一个无返回值且只接受一个参数的方法组成。

这边主要说明两类常见的aware子类,ApplicationContextAware和BeanNameAware

ApplicationContextAware接口

这个在前期说明spring 的后置处理器时已经说明过,在bean的初始化阶段做的处理,如果不熟悉,可以先看这篇文章:spring生命周期-BeanPostProcessor在spring中应用
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这里将容器的对象放进初始化的bean中

在这里插入图片描述

BeanNameAware接口

这个也是在bean初始化方法里面做的处理,在前置处理器处理之前
在这里插入图片描述
将spring相关容器设置进bean
在这里插入图片描述
从这里可以看出,这个BeanNameAware 和ApplicationContextAware 接口初始化的方式和时间不是一样的。

实例很简单

@Component
public class Red implements ApplicationContextAware,BeanNameAware,EmbeddedValueResolverAware {
	
	private ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("传入的ioc:"+applicationContext);
		this.applicationContext = applicationContext;
	}

	@Override
	public void setBeanName(String name) {
		// TODO Auto-generated method stub
		System.out.println("当前bean的名字:"+name);
	}

	@Override
	public void setEmbeddedValueResolver(StringValueResolver resolver) {
		// TODO Auto-generated method stub
		String resolveStringValue = resolver.resolveStringValue("你好 ${os.name} 我是 #{20*18}");
		System.out.println("解析的字符串:"+resolveStringValue);
	}
}

 @Test
    public void test1(){

        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);

        System.out.println("容器创建完成");

        //applicationContext.getBean("car");

        applicationContext.close();
    }

结果为:
在这里插入图片描述

Spring回调接口Aware-源码分析 title: Spring回调接口Aware-源码分析 date: 2020-04-24 21:37:27 tags: Spring提供了一种机制,让bean在实例化的时候,能够感知(获取)容器中的一些组件,即Aware接口回调的方式。这种机制一般是Spring框架内部使用。 Aware z作用 BeanFactoryAware 获取当前 BeanFactory,这样可以调用... 阅读详情

相关推荐

PostgreSQL 超详细安装与使用教程:从入门到实战

本文将详细介绍PostgreSQL数据库的安装配置与基础使用。首先从Windows系统安装入手,分步骤讲解17.5版本的安装流程、环境变量配置及服务启动验证。接着重点介绍了pgAdmin4图形化管理工具的安装与使用,包括界面语言设置、数据库连接、创建与管理数据库等操作,同时对比了可视化操作与SQL命令两种方式。最后梳理了PgSQL基础语法,涵盖表的创建、增删改查操作、约束管理等内容,为初学者提供了完整的PostgreSQL入门指南。文章兼顾理论知识与实际操作,既适合数据库新手学习,也可作为开发人员的快速参考

gtf212的博客 1万+

入门 15 - Aware相关接口

Spring中提供一些Aware相关接口,像是BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,实作这些 Aware接口的Bean在被初始之后,可以取得一些相对应的资源,例如实作BeanFactoryAware的Bean在初始后,Spring容器将会注入BeanFactory的...

中源 409

ADS新手必看:用Filter DesignGuide快速搞定一个4GHz LC低通滤波器(附保姆级避坑指南)

本文为ADS新手提供了4GHz LC低通滤波器的完整设计流程,重点介绍了如何使用Filter DesignGuide避免参数设置陷阱、正确解读仿真结果以及解决实际电路与理论值的偏差问题。通过真实工程案例,详细讲解了工程创建、Filter DesignGuide配置、电路优化、仿真设置及实际工程中的进阶技巧,帮助工程师快速掌握LC滤波器设计。

weixin_30878501的博客 300

Spring之ApplicationContextAware使用详解

Spring定义的类实现ApplicationContextAware接口会自动的将应用程序上下文加入,首先我们看下具体的实现示例; 1.示例代码 package com.yaomy.security.oauth2.filter; import org.springframework.beans.BeansException; import org.springframework.context...

OceanSky的专栏 2万+

添加odbc数据源时的一些问题和解决办法

pl/sql

Mr_Syh的博客 9641

超详细YOLOv8姿态检测全程概述:环境、训练、验证与预测详解

本篇博客详细介绍了使用YOLOv8-pose进行姿态估计的全过程,包括不同版本模型的性能比较、训练与验证步骤,以及预测代码的实现。它对模型参数、训练过程和输出结果进行了解释,同时提供了详细的配置文件示例和标签数据格式说明。此外,还演示了如何使用预训练模型进行图像预测,并如何处理和理解预测结果。最后,它还讨论了如何评估和比较不同模型的性能。如果有哪里写的不够清晰,小伙伴本可以给评论或者留言,我这边会尽快的优化博文内容,另外如有需要,我这边可支持技术答疑与支持。

CDBmax的博客 3万+

ApplicationContextAware

ApplicationContextAware

qq_37705525的博客 4720

Evolution of Heuristics: Towards Efficient Automatic Algorithm Design Using Large Language Model

启发式算法广泛用于处理复杂的搜索和优化问题。然而,启发式算法的手动设计通常非常耗费人力,需要丰富的工作经验和知识。本文提出了启发式算法的进化 (EoH),这是一种新颖的进化范式,它利用大型语言模型 (LLM) 和进化计算 (EC) 方法进行自动启发式设计 (AHD)。EoH 代表自然语言中的启发式概念,称为思想。然后由 LLM 将它们转换为可执行代码。进化搜索框架中思想和代码的演变使其在生成高性能启发式算法方面非常有效和高效。

weixin_43961909的博客 2159

Spring的ApplicationContextAware的使用

Spring的ApplicationContextAware的使用1 问题引入2 ApplicationContextAware的简介3 使用场景 Spring中ApplicationContextAware主要用来获取Spring上下文已经实例化的Bean对象 1 问题引入 项目使用Spring管理各个实例对象Bean, 如果为了使用已被实例化的Bean对象,如果使用再次加载配置文件的方法,可能会出现一个问题,如一些线程配置任务, 会启动两份,产生了冗余. ApplicationContext app

ABestRookie的博客 7456

YOLOv13改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 已更新种不同的改进方案,专栏内的每篇文章皆,均可顺利运行。2️⃣ 订阅专栏即可进群获取以及从的各种答疑内容。3️⃣ 全新的YOLOv13改进专栏,,只为更好的满足论文发表的要求。专栏内容,专栏实时评分,全网最高,质量保证。🎫。。

Limiiiing的博客 9143

ubuntu-25.04-desktop-amd64 工具VMware-tools 正确安装方法

摘要:Ubuntu 25.04虚拟机安装VMware Tools后无法实现主机与虚拟机间的文件复制粘贴和拖拽功能,问题可能源于工具兼容性。建议优先安装open-vm-tools套件(含open-vm-tools-desktop),而非官方VMware Tools。具体方案:通过终端执行安装命令后重启系统。该方法已实测有效解决该兼容性问题。(149字)

安徽锐锋科技-沐雨潇竹 672

【Spring】15 ApplicationContextAware 接口

Spring 框架提供了许多回调接口,用于在 Bean 的生命周期中执行特定的操作。通过实现 ApplicationContextAware 接口,Spring 提供了一种便捷的方式让 Bean 获取对 Spring 容器的引用。这使得 Bean 可以在运行时与容器进行交互,获取其他 Bean 的引用、获取环境变量等。

好久不见的流星 3539

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring源码学习IOC(7):浅析aware相关接口

spring中 有一大堆Aware结尾接口,  例如BeanFactoryAware,  ApplicationContextAware, ServletContextAware等  在程序中 我们自定义的bean实现了 Aware相关接口  spring 通过回调   就可以获得一些资源    比如说 我们的bean实现BeanFactoryAware  spring会在bean实例

执子之手 622

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring之Aware接口介绍

Spring 中的Aware接口详解

波波烤鸭的博客 9363

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

spring之Aware接口

Aware接口介绍

wujun2412的博客 4509

Spring 源码学习 4:Aware 接口

Spring Aware接口与注解失效问题分析 摘要:Spring Aware接口(如ApplicationContextAware、BeanNameAware)允许bean获取容器资源,而InitializingBean接口提供初始化生命周期钩子。文章通过代码示例展示了这些接口的使用方式,并与依赖注入方式(@Autowired、@PostConstruct)进行对比。特别指出当配置类包含BeanFactoryPostProcessor时,会因创建顺序导致注解失效,并给出两种解决方案:1)重构配置类分离工厂

梦幻天空 1132

Spring源码解析:Spring Aware 原理解析

写在前面 Spring源码解析系列文章是我最近在学习了一段Spring,SpringBoot和SpringMVC等一系列的源码后整理的文章。我会随着我对Spring的理解来进行相应的文章的整合和归纳。 我决定从提出一个问题开始。然后围绕着解决这个问题的方式来剖析源码。当我们把一个问题搞懂了的时候。里面的源码我们也就清楚了。事实上看源码不是目标。解决一些日常的困惑才是目标。 问题 为什么被S...

Standup-jb的博客 2378

Spring中Aware接口 -【Spring底层原理】

这里以ApplicationContextAware为例,实现了ApplicationContextAware接口,则将User对象转成ApplicationContextAware接口调用setApplicationContext方法进行注入。这里对Aware的三个接口进行了举例,分别是ApplicationContextAware、BeanNameAware、EmbeddedValueResolverAware。这里就以一些常用的接口进行举例,实现其接口,通过这些接口使用spring底层的一些组件。

2501_90255303的博客 922

Aware接口作用

Aware(感知)接口是一个标记,里面没有任何方法,实际方法定义都是子接口确定(相当于定义了一套规则,并建议子接口中应该只有一个无返回值的方法)。我们知道spring已经定义好了很多对象,如ApplicationContext、BeanFactory、Environment等,但是这些对象是spring框架自身的,我们去获取这些是及其困难的,所以spring定义了一套规则能让我们很容易得获取框架中的对象,这就是Aware的意义,现在对Aware有一定了解了吧,Aware是感知spring容器中的对象。

lp1302190871的博客 1597

spring中的Aware接口的作用以及代码剖析

前言 不知道大家有没有遇到这样的场景,比如,我自己有一个PersonService, 实现类是PersonServiceImpl,我想在PersonServiceImpl中使用applicationContext,怎么去做呢?如果使用xml的话,我们当然可以使用构造函数方式注入,要么用setter方式注入,也使用@Resouce或者@Autowired(在springboot中可以...

badly的博客 5067

Spring Aware接口作用及原理

前言 在Spring中有一个及其底层且名字很熟悉的接口Aware,如常见的BeanNameAware、Applicatio...

lishuzhen5678的博客 2368

spring源码学习 五:Aware接口与扩展

这一篇文章,我们来认识Aware和接口,了解它们是做什么的以及它们和Spring常用注解有什么关系。此外还需要了解各种初始化和销毁方法的执行顺序。@Autowired等功能属于扩展功能,需要Bean后处理器提供支持,而Aware和接口的方法不需要,属于内置功能,Spring容器总会回调它们,Spring里的许多组件类都选择去实现Aware和InitializingBean接口,而不是注解,因为这种扩展功能有可能失效。各种初始化和销毁方法的执行顺序:扩展功能(内置接口(@Bean指定。

nichilemei的博客 902

SPRING06_源码之核心组件接口Aware

SPRING06_源码之核心组件接口Aware

所得皆惊喜 1398

Spring框架Aware接口的作用和应用

在看源码的时候,经过层层追踪,发现有这么一个接口 Aware,这是一个空接口,空接口又称标记接口。标记接口的作用是实现该接口的类都被标记具有某项功能。那么扩展Aware接口的类都具有什么功能呢?Aware 是 Spring框架 3.1 版本 beans 包中的一个接口,源码如下:一个超级标记接口,指示一个Bean有资格通过回调式方法被Spring容器通知某个特定框架对象。具体的方法签名由各个子接口确定,但通常应该只包含一个接受单个参数且返回void的方法。这段话不好懂,没关系,继续往下看。

八戒的博客 1175

Spring源码第六讲 Aware接口

可见BeanNameAware 注入 bean 的名字实现了ApplicationContextAware 接口后注入了容器。先执行Aware接口再执行初始化总结:Aware 接口用于注入一些与容器相关信息, 例如a. BeanNameAware 注入 bean 的名字b. BeanFactoryAware 注入 BeanFactory 容器c. ApplicationContextAware 注入 ApplicationContext 容器。

m0_56369671的博客 1112
上一篇: 工厂设计模式+策略模式+模板方法模式的灵活运用
下一篇: 一、spring aop 原理之 后置处理器 AnnotationAwareAspectJAutoProxyCreator 源码解析
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值