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

Aware,这是一个空接口,空接口又称标记接口。标记接口的作用是实现该接口的类都被标记具有某项功能。
一个超级标记接口,指示一个Bean有资格通过回调式方法被Spring容器通知某个特定框架对象。具体的方法签名由各个子接口确定,但通常应该只包含一个接受单个参数且返回void的方法。
Aware 的子接口,每个过一遍。

1、ApplicationContextAware 接口中有一个方法

void setApplicationContext(ApplicationContext applicationContext)

实现该接口的 Bean 可以在初始化时获取到 ApplicationContext 对象,从而可以与 Spring 容器进行交互,例如获取其他 Bean、访问环境变量、注册监听器等。

2、BeanFactoryAware 接口中有一个方法:

void setBeanFactory(BeanFactory beanFactory)

实现该接口的 Bean 可以在初始化时获取到 BeanFactory 对象,从而可以与 Spring 容器进行交互,例如获取其他 Bean、访问环境变量、注册监听器等。和上面的 ApplicationContextAware 作用一样。

3、ApplicationEventPublisherAware 接口中有一个方法:

void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)

实现该接口的 Bean 可以在初始化时获取到 applicationEventPublisher 对象,发布应用程序事件,或将自定义事件发布到 Spring 应用程序上下文中,从而实现事件驱动的编程模型。

4、BeanClassLoaderAware 接口中有一个方法:

void setBeanClassLoader(ClassLoader classLoader)

实现该接口的 Bean 可以在初始化时获取到 classLoader 类加载器,从而可以动态加载类、资源文件等操作。对于一些需要动态加载类或资源的情况非常有用,例如在某些框架或库中需要根据运行时的情况加载特定类或配置文件时。

5、BeanNameAware 接口中有一个方法:

void setBeanName(String name)

实现该接口的 Bean 可以在初始化时获取到自己在 Spring 容器中的名字。

6、EmbeddedValueResolverAware 接口中有一个方法:

void setEmbeddedValueResolver(StringValueResolver resolver)

实现该接口的 Bean 可以在初始化时获取解析嵌入值的解析器 StringValueResolver 对象,使用它来解析配置文件中的占位符,获取真实的值并进行相应的处理。这样可以使 Bean 在初始化时获取到配置文件中的动态值,从而实现更灵活的配置和处理逻辑。
嵌入值是指在配置文件中使用 ${…} 格式的占位符,Spring 容器会在加载配置文件时将这些占位符替换为相应的值。

7、EnvironmentAware 接口中有一个方法:

void setEnvironment(Environment environment)

实现该接口的 Bean 可以在初始化时获取 Spring 的 Environment 环境对象,从而获取配置文件中的属性值、系统属性、环境变量等,Bean 可以根据不同的环境进行相应的逻辑处理,例如根据配置文件中的属性值决定 Bean 的行为,或者根据环境变量来动态调整 Bean 的配置等,使 Bean 在不同的环境下具有更灵活的适应性和可配置性。

8、ImportAware 接口中有一个方法:

void setImportMetadata(AnnotationMetadata importMetadata)

实现该接口的 Bean 可以在初始化时获取到导入该 Bean 的类信息 AnnotationMetadata 对象,包括导入类的名称、注解信息等,并根据需要进行相应的处理,例如根据导入类的信息来动态调整 Bean 的配置或行为。这样可以使 Bean 在被导入时具有更多的灵活性和可定制性。

9、LoadTimeWeaverAware 接口中有一个方法:

void setLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver)

实现该接口的 Bean 可以在初始化时获取加载时织入器LoadTimeWeaver 对象,从而可以在类加载时进行一些额外的操作,例如织入切面、增强类等。加载时织入是一种在类加载时动态织入增强的技术,典型的应用是在使用 AspectJ 进行编程时。

10、MessageSourceAware 接口中有一个方法:

void setMessageSource(MessageSource messageSource)

实现该接口的 Bean 可以在初始化时获取到消息源 MessageSource 对象,设置相应语言的消息文本,从而可以实现国际化的消息处理。

11、NotificationPublisherAware 接口中有一个方法:

void setNotificationPublisher(NotificationPublisher notificationPublisher)

实现该接口的 Bean 可以在初始化时获取通知发布器NotificationPublisher 对象,发布通知或事件,以便其他组件可以监听到并采取相应的行动,从而实现更灵活和松耦合的组件之间的通信和协作。

12、ResourceLoaderAware 接口中有一个方法:

void setResourceLoader(ResourceLoader resourceLoader)

实现该接口的 Bean 可以在初始化时获取资源加载器ResourceLoader对象,用于加载各种资源,例如文件、URL、类路径等,实现更灵活的资源管理和处理。

13、SchedulerContextAware 接口中有一个方法:

void setSchedulerContext(SchedulerContext schedulerContext)

实现该接口的 Bean 可以在初始化时获取调度器上下文SchedulerContext 对象,提供与调度器相关的信息和操作,通常用于管理任务调度和执行。例如添加、删除或修改调度任务,更灵活地与调度器交互,实现定时任务的管理和控制。

14、ServletConfigAware 接口中有一个方法:

void setServletConfig(ServletConfig servletConfig)

实现该接口的 Bean 可以在初始化时获取到 Servlet 配置信息,包含了 Servlet 的初始化参数,可以在运行时被访问和利用。

15、ServletContextAware 接口中有一个方法:

void setServletContext(ServletContext servletContext)

实现该接口的 Bean 可以在初始化时获取 Servlet 上下文ServletContext 对象,访问 Web 应用程序的上下文信息,与 Web 应用程序的环境进行交互,实现更灵活的 Web 开发和配置,例如获取 Web 应用程序的初始化参数、获取资源文件的真实路径、访问 ServletContext 中的属性等。

通过这些子接口,大致可以推出 Aware 接口的作用。
Aware 翻译成中文是知道的、意识到的,是个形容词。知道的、意识到的啥呢,得有个名词吧,子接口给出了我们想要的答案。
ApplicationContextAware 接口是想知道 ApplicationContext 容器对象。

BeanFactoryAware 接口是想知道 BeanFactory对象。

ApplicationEventPublisherAware接口是想知道 ApplicationEventPublisher对象。
其他子接口以此类推,最后我们可以得出 Aware 标记接口的作用:在Spring应用程序中的Bean初始化时,可以访问Spring容器的特定服务或资源。

了解了 Aware和其子接口的作用,我们就可以在需要的时候,扩展Aware或它的子接口。
上面我们没有举例子,只是简单说明作用,其中一个比较常见的场景就是在容器外获取容器中的bean。

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

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

相关文章

java设计模式四 桥接模式

桥接模式关注于将抽象部分与实现部分分离,使它们可以独立变化。它通过在抽象和实现之间建立一个桥梁来实现这一目的。这种设计模式属于结构型模式。 假设我们要设计一个图形编辑器,其中图形(如圆形、正方形)可以有不同的颜色填充…

GStreamer日志调试笔记

1、查询所有分类 #gst-launch-1.0 --gst-debug-help 2、查询videotestsrc的日志 #gst-launch-1.0 --gst-debug-help | findstr videotestsrc 结果: 3、使用--gst-debug设置相应日志类型的相应等级,越大显示日志越多,排查内存泄露可以设置为9 …

国内外主流大模型都具备有哪些特点?

文章目录 ⭐ 火爆全网的大模型起点⭐ 国外主流LLM及其特点⭐ 国内主流LLM及其特点⭐ 全球大模型生态的发展 该章节呢,我们主要是看一下关于国内外主流的大语言模型,通过它们都具备哪些特点,来达成对多模型有一个清晰的认知。对于 “多模型” …

计网作业0429

1.关于现有IPv4分片/重组机制,描述正确的是( ) A.可以在源主机分片 B.可以在中间路由器分片 C.可以在目的主机重组 D.不可以在中间路由器重组 2. 普通路由器转发(非NAT)IP报文过程中,IP报文中哪些字段会…

帮助命令

1.man 原意:manual 所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信息 例:$ man ls 查看ls命令的帮助信息 查看命令的帮助主要是看这个命令是干什么用的&am…

Vue3+.NET6前后端分离式管理后台实战(十七)

1,Vue3.NET6前后端分离式管理后台实战(十七)已经在微信公众号更新,有兴趣的扫码关注一起交流学习。

数据治理:数据孤岛是企业信息化发展中难以避免的阶段

随着信息技术的飞速发展,企业对于数据的依赖程度日益加深。在这个过程中,数据治理成为了企业信息化建设的核心环节。然而,在实际操作中,企业往往会遇到一种难以避免的现象——数据孤岛。 一、数据孤岛的定义与成因 数据孤岛&…

电磁兼容(EMC):产品适用静电放电(ESD)标准全解

目录 1. 标准体系 2. 试验方法标准 3. 常见产品的抗扰度标准 自己研发的产品到底需要满足什么样的静电放电标准要求才是满足国家标准要求。客户提出的静电放电接触放电4kV,空气放电8kV要求,是高于国家标准要求还是低于国家标准要求?面对这…

PyCharm 2024新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

名人说:一点浩然气,千里快哉风。—— 苏轼《水调歌头》 创作者:Code_流苏(CSDN) 目录 一、Python环境搭建二、PyCharm下载及安装三、解释器配置及项目测试四、PyCharm汉化五、背景图设置 很高兴你打开了这篇博客,如有疑问&#x…

类的流插入与流提取

1.自定义类型不能直接使用流插入与流提取 为什么内置类型可以直接使用流插入与流提取? 其实本质上是人家已经写好了相关的函数,内置类型可以直接调用cout与cin 对于自定义类型,我们需要自己写相关的函数。 2.解决方法 2.1自己在类里面写一个…

微信小程序 【关键部分】

1. 动机 最近在开发小程序,小程序既需兼顾针对新用户的内容预览,又要为注册用户提供服务,简单梳理下,基本需求如下: 小程序共三个tab页,所有用户都可以浏览首页内容,了解我们可以提供的优质服…

Microsoft Remote Desktop Beta for Mac:远程办公桌面连接工具

Microsoft Remote Desktop Beta for Mac不仅是一款远程桌面连接工具,更是开启远程办公新篇章的利器。 它让Mac用户能够轻松访问和操作远程Windows计算机,实现跨平台办公的无缝衔接。无论是在家中、咖啡店还是旅途中,只要有网络连接&#xff0…

鸿蒙UI复用

鸿蒙UI复用 简介BuilderBuilder的使用方式一Builder的使用方式二Builder的使用方式三 Component使用Component复用UI 简介 在页面开发过程中,会遇到有UI相似的结构,如果每个UI都单独声明一份,会产生大量冗余代码,不利于阅读。遇到…

Python头歌合集(题集附解)

目录 一、Python初识-基本语法 第1关:Hello Python! 第2关:我想看世界 第3关:学好Python 第4关:根据圆的半径计算周长和面积 第5关:货币转换 二、turtle简单绘图 第1关:英寸与厘米转换 第2关&#xff1…

鸿蒙应用开发系列 篇二:鸿蒙系统开发工具与环境

文章目录 系列文章硬件与软件需求DevEco Studio扩展工具与框架开发资源系列文章 鸿蒙应用开发系列 篇一:鸿蒙系统概述 鸿蒙应用开发系列 篇二:鸿蒙系统开发工具与环境 (系列计划预告) 鸿蒙系统UI/UX设计 鸿蒙系统应用开发基础 鸿蒙系统高级开发技术 鸿蒙系统特色功能开发 …

线程池和CountDownLatch搭配使用

一,CountDownLatch CountDownLatch是Java并发编程中用于线程间协调的一个同步辅助类。它通过一个初始计数值来控制线程的等待,这个计数值在其他线程执行特定任务时递减。 初始化:创建CountDownLatch实例时,你需要指定一个整数值&…

vue-cli+vue3+vite+ts 搭建uniapp项目全过程(一)

unapp官方提供了cli 脚手架创建 uni-app 项目的文档 Vue3/Vite版要求 node 版本 18、20使用Vue3/Vite版创建不会提示选择模板,目前只支持创建默认模板 本文以vue3vitets为例 1、初始化项目 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project 执行完生成…

037——加入Kconfig机制

目录 一、什么是Kconfig 1.1 由来 1.2 功能 二、 Kconfig的基本语法 2.1 Kconfig 构建项目解析 2.2 怎么调用子makefile做menuconfig 方法一:使用make命令直接调用子目录 方法二:使用变量来指定子目录 方法三:使用include指令包含子…

在RStudio上用Git功能管理Github上的项目

在本教程中,你将学习以下内容: 1. 创建一个新的仓库。 2. 使用 Git 和 RStudio 在本地机器上使用你的仓库。 3. 使用 GitHub.com 网站或 GitHub Enterprise 完成 GitHub 工作流程。 4. 使用 GitHub Pages 发布和共享你的 R Markdown 文档。 先决条件&a…

Java openrasp记录-02

主要分析以下四个部分: 1.openrasp agent 这里主要进行插桩的定义,其pom.xml中定义了能够当类重新load时重定义以及重新转换 这里定义了两种插桩方式对应之前安装时的独立web的jar的attach或者修改启动脚本添加rasp的jar的方式 其中init操作则需要将ras…