Spring实现Aware接口,完成对IOC容器的感知

Spring中的Aware接口及应用场景 Aware接口是Spring Framework中提供的一组标记接口,用于在Bean装配的过程中获取Spring容器中提供的一些核心组件或运行时上下文等信息。通过使用Aware接口,我们可以在Bean实例化和初始化过程中获取到Spring容器中其他组件,方便Bean类实现更复杂的业务逻辑。本文将会一一介绍Spring中各个Aware接口,以及这些接口的主要应用场景。 阅读详情

容器管理的Bean一般不需要了解容器的状态和直接使用容器,但是在某些情况下,是需要在Bean中直接对IOC容器进行操作的,这时候,就需要在Bean中设定对容器的感知。Spring IOC容器也提供了该功能,它是通过特定的Aware接口来完成的。aware接口有以下这些:

BeanNameAware,可以在Bean中得到它在IOC容器中的Bean的实例的名字。

BeanFactoryAware,可以在Bean中得到Bean所在的IOC容器,从而直接在Bean中使用IOC容器的服务。

ApplicationContextAware,可以在Bean中得到Bean所在的应用上下文,从而直接在Bean中使用上下文的服务。

MessageSourceAware,在Bean中可以得到消息源。

ApplicationEventPublisherAware,在bean中可以得到应用上下文的事件发布器,从而可以在Bean中发布应用上下文的事件。

ResourceLoaderAware,在Bean中可以得到ResourceLoader,从而在bean中使用ResourceLoader加载外部对应的Resource资源。

在设置Bean的属性之后,调用初始化回调方法之前,Spring会调用aware接口中的setter方法。

下面给出一个例子:

定义一个实现BeanNameAware接口的类:

package com.spring.aware;

import org.springframework.beans.factory.BeanNameAware;

/**
 * <p>Class:LoggingBean</p>
 * <p>Description:</p>
 * @author Liam
 * @Date [2012-9-7 上午9:23:12]
 */
public class LoggingBean implements BeanNameAware {

	private String name;

	public void setBeanName(String name) {
		this.name = name;
	}

	public void run() {
		System.out.println("容器被感知--BeanNameAware:Bean name is'" + this.name + "'.>>"+name);
	}
}

在定义个实现BeanFactoryAware接口的类:

package com.spring.aware;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;

/**
 * <p>Class:ShutdownHookBean</p>
 * <p>Description:</p>
 * @author Liam
 * @Date [2012-9-7 上午9:24:13]
 */
public class BeanDestried implements BeanFactoryAware{

	private ConfigurableListableBeanFactory beanFactory;

	public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
		if (beanFactory instanceof DefaultListableBeanFactory) {
			this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
		}
	}

	public void run() {
		if (this.beanFactory != null) {
			System.out.println("容器被感知--BeanFactory-Destroying singletons.>>"+beanFactory);
			this.beanFactory.destroySingletons();
		}
	}

}

在applicationContext中配置好:

<bean id="logging" class="com.spring.aware.LoggingBean"/>
<bean id="beanDestried" class="com.spring.aware.BeanDestried"/>

测试类如下:

package com.spring.aware;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * <p>Class:App</p>
 * <p>Description:</p>
 * @author Liam
 * @Date [2012-9-7 上午9:13:36]
 */
public class App {
	public static void main(String[] args) throws Exception {
		ApplicationContext factory = new ClassPathXmlApplicationContext("classpath:beans.xml");
		LoggingBean lb = (LoggingBean) factory.getBean("logging");
		lb.run();
		BeanDestried sd = (BeanDestried)factory.getBean("beanDestried");
		sd.run();
	}
}

测试结果如下:

容器被感知--BeanNameAware:Bean name is'logging'.>>logging
容器被感知--BeanFactory-Destroying singletons.>>org.springframework.beans.factory.support.DefaultListableBeanFactory@a6cdf5: defining beans [logging,beanDestried]; root of factory hierarchy
SpringBean 生命周期之Aware接口(一) SpringBean 生命周期之Aware接口 阅读详情

相关推荐

spring中的Aware接口概念

setApplicationContext(ApplicationContext applicationContext),注意这里的set可不是让你去给它设置自己的容器,我们最多用的是获取这个容器类,后续从容器里拿到一些我们喜欢的bean之类的微操一下,当然你有能力你也可以在这里替换为自己的容器类。这点是不是很费解,我这个bean竟然不知道自己在哪,自己叫啥,是不是显得很呆,其实spring的IOC导致的,我这个bean刚开始并不知道我在容器中到底叫啥,直到比如在xml配置中给我指定我是谁。

weixin_43970625的博客 1471

Spring原理学习(四)Aware 接口

Java 配置类包含 BeanFactoryPostProcessor 的情况,因此要创建其中的 BeanFactoryPostProcessor 必须提前创建 Java 配置类,而此时的 BeanPostProcessor 还未准备好,导致 @Autowired 等注解失效。例如下面这个例子:你会发现用 Aware 注入 ApplicationContext 成功,而 @Autowired 注入 ApplicationContext 失败要想生效就得加处理器。配置类MyConfig1。

小鲁蛋的博客 5097

scannet数据集下载文件

scannet数据集下载文件 由于大家会申请scannet数据集,审批比较慢,我将下载的文件里面的内容贴出来,大家可以复制放进py文件中,运行就可以下载 ps:别再私信要数据集了,这个自己下载,如果光三维数据的话,还是很快的,当然如果路由器翻了墙的话,下载会更快。 #!/usr/bin/env python # Downloads ScanNet public data release # Run with ./download-scannet.py (or python download-scannet.

weixin_40766438的博客 9228

spring之Aware接口

Aware接口介绍

wujun2412的博客 4510

深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积

深度可分离卷积不用多说,在轻量级网络架构方面是一个绕不开的话题,只要接触深度学习多多少少会接触。深度可分离卷积即DepthwiseSeparableConvolution,该卷积将一个常规卷积过程划分成两个完成Depthwise卷积和Pointwise卷积,在保证输出一样时,计算量大大降低。首先来看,一个常规卷积是怎么实现的。其示意图如果我们从通道数变换的角度来看,卷积就是将3通道的tensor变为了4通道的tensor,我们来看看深度可分离卷积是怎么实现通道的变化的。...

xu.hyj 1万+

UNext:基于 MLP 的快速医学图像分割网络

有代码,可深入学习轻量级分割模型的论文切入点 UNet 及其最新扩展(如 TransUNet)近年来一直是领先的医学图像分割方法。然而,这些网络无法有效地用于应用中的快速图像分割,因为它们参数繁重、计算复杂且使用缓慢。为此,我们提出了 UNeXt,它是一种基于卷积多层感知器(MLP)的图像分割网络。我们以有效的方式设计了 UNeXt,其中包括早期卷积阶段和潜在阶段的 MLP 阶段。我们提出了一个标记化的 MLP 块,我们可以在其中有效地标记和投影卷积特征,并使用 MLP 来对表示进行建模。

Philo的博客 3941

Spring 中的 Aware 接口的详细解释

作用:这些 接口的使用场景展示了它们如何让业务逻辑更灵活、更易于扩展和维护,帮助开发人员利用 Spring 容器的特性解决实际业务问题。你可以根据具体的业务需求,选择合适的 接口,实现与 Spring 容器的更深入交互。 2. ApplicationContextAware 接口定义: 作用: 3. BeanNameAware 接口定义: 作用: 4. ResourceLoaderAware 接口定义: 作用: 5. MessageSourceA

qq_47260186的博客 1537

基于NE555的触摸延时开关电路设计与实现

本文详细介绍了基于NE555芯片的触摸延时开关电路设计与实现方法。通过分析NE555的单稳态工作模式,结合定时电阻、电解电容等关键元件选型,提供了一套完整的电路搭建方案。文章还包含抗干扰设计、调试技巧及常见故障处理,帮助电子爱好者快速掌握触摸延时灯的制作要点。

weixin_29268267的博客 788

Spring高级篇-Spring IOC容器 Aware 接口

BeanClassLoaderAware 接口为开发者提供了一种简单而有用的方式来获取 Bean 的类加载器信息。通过实现该接口,Bean 可以在初始化阶段获取自身类加载器,从而更灵活地处理一些与类加载器相关的逻辑。BeanFactoryAware 接口是一个回调接口,它提供了一个用于设置 Bean 工厂的方法。

qq_31366767的博客 1442

了解你的GPU:深入探讨AMD SMI

2024年9月17日 作者:Matt Elliott对于使用AMD硬件的系统管理员和高级用户来说,性能优化和高效的资源监控至关重要。AMD系统管理界面命令行工具`amd-smi`正是为了解决这些需求而设计的。amd-smi是一个多功能的命令行工具,专门用于管理和监控AMD硬件,主要侧重于GPU。作为未来取代`rocm-smi`的工具,`amd-smi`有望成为跨广泛设备的AMD硬件管理的主要工具。

数字人生 4520

俄罗斯方块 C++控制台版

一、创建方块 wstring tetromino[7]; tetromino[0].append(L"..X...X...X...X."); // Tetronimos 4x4 tetromino[1].append(L"..X..XX...X....."); tetromino[2].append(L".....XX..XX....."); tetromino[3].append(L"..X..XX..X......"); tetromino...

一只大鸽子的博客 1622

Spring Aware 接口详解:让 Bean 感知容器资源

Spring Aware 接口详解:让Bean感知容器资源 摘要:Spring Aware接口是一组标记接口,允许Bean在初始化阶段安全获取容器资源。通过回调机制,Bean可以感知Bean名称、BeanFactory、类加载器或ApplicationContext等核心容器组件。文章详细介绍了Aware接口的设计原理、触发时机及常用子接口,包括BeanNameAware、BeanFactoryAware、ApplicationContextAware等,并提供了代码示例展示如何综合使用多个Aware接口。

刘一说的IT专栏 849

ADS基础教程20 - 电磁仿真(EM)参数化仿真

一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号四、总结1)在Layout视图,菜单栏中选中EMComponent2)在弹出的参数编辑框中,采用标称/扰动()设计。使用子网(Subnetwork)参数。这些方法是互斥的,在为单个组件定义参数时不能将它们组合起来。标称/扰动(Nominal/Perturbed)参数使用平面化布局场景,并且只包含端口和原始图形形状(如多边形、矩形和圆形)时定义。

XZ_ZC的博客 4028

Spring揭秘:Aware接口应用场景及实现原理!

Aware接口赋予了Bean更多自感知的能力,通过实现不同的Aware接口,Bean可以轻松地获取到Spring容器中的其他资源引用,像ApplicationContext、BeanFactory等。 这样不仅增强了Bean的功能,还提高了代码的可维护性和扩展性,从而让Spring的IoC容器变得更加强大和灵活。

科技互联网领域深度探索者,乐于分享与写作。 2509

在 SAP 中修改 Profile 文件中的主机名需要谨慎操作,需需确保所有相关配置保持一致

在SAP系统中修改Profile文件主机名需谨慎操作,主要步骤包括:1)停止相关SAP服务;2)重命名并编辑实例级Profile文件(如ER1_D00_OLDHOST改为ER1_D00_LRPSAP),修改所有含旧主机名的参数;3)可选更新默认Profile文件;4)在Windows系统中调整注册表配置;5)验证一致性后重启服务。关键注意:保持大小写统一、修改前备份文件、集群环境需同步所有节点。通过系统日志确认新主机名生效且无报错。

金牌架构师 1049

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring IOC 之深入分析 Aware 接口

本文我们基本上可以了解 Aware 真正的含义。

小徐的博客 1320

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring —— IoC 容器详解

引言 本篇博客总结自官网的《The IoC Container》,其中会有一些自己的语言描述和理解,大部分会摘抄官网的解释说明。 主要介绍什么是 IoC 容器,什么是 Bean,依赖,Bean Definition,Bean Factory 等概念知识,帮助扫除 spring framework 框架知识盲区。 一、什么是 Spring IoC 容器?什么是 Bean? IoC 也可以理解为依赖注入(dependency injection)(参考《控制反转 IOC 与依赖注入 DI》),它是一个只

Morty的技术乐园 2371

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

揭秘small-spring的Aware接口:实现容器感知的完整解决方案

**Aware接口**是Spring框架中实现**容器感知**的核心机制,让Bean能够主动获取Spring容器中的关键对象。在small-spring项目中,Aware接口的实现为开发者提供了一套完整的**感知容器对象**的解决方案。通过这套机制,Bean可以轻松获取ApplicationContext、BeanFactory等核心容器组件,实现更灵活的业务逻辑开发。😊 ## 🔍 什么是A

gitblog_00996的博客 456

mini-spring ApplicationContextAwareProcessor处理Aware深度解析:从接口设计到容器实现

在使用Spring框架时,你是否曾遇到需要在Bean中获取ApplicationContext或BeanFactory的场景?是否困惑于容器如何将自身引用注入到Bean中?本文将深入剖析mini-spring框架中ApplicationContextAwareProcessor组件如何处理Aware接口,带你彻底理解Spring容器的核心注入机制。读完本文,你将掌握: - Aware接口体系的设...

gitblog_00188的博客 820

Spring手撸源码系列-实现Aware感知容器对象

tia 此次实现会比较简单,围绕着Aware感知事件的处理,所谓Aware感知通俗说明就是将applicationContext、beanFactory、beanName、beanClassLoader等等的IOC的容器对象传给用户,使用户能够获取该对象并进行使用的操作。 那么就要考虑如何传给用户,怎么合理设计,让用户得到容器对象 1.工程目录 等待上传中 2.xml类图 2.1.Aware接口 定义了Aware接口,这个接口就是标记的,如果任何继承此接口则代表是感知接口,统一判断对象是

dfBeautifulLive的博客 887

基础篇:IoC(十一):Aware接口

本文介绍了Spring框架中的Aware接口机制及其实现原理。Aware接口(如BeanFactoryAware和ApplicationContextAware)允许Bean感知其所在的容器环境。通过源码分析,展示了BeanFactoryAware通过initializeBean方法直接设置,而ApplicationContextAware则通过BeanPostProcessor机制实现。文章还探讨了Aware接口的典型应用场景,如SpringUtil工具类通过实现BeanFactoryPostProces

moneywenxue的博客 881

如何让 Bean 深度感知 Spring 容器

Spring 有一个特点,就是创建出来的 Bean 对容器是无感的,一个 Bean 是怎么样被容器从一个 Class 整成一个 Bean 的,对于 Bean 本身来说是不知道的,当然也不需要知道,也就是 Bean 对容器的存在是无感的。也就是说,虽然 Spring 中的 Bean 可以不用去感知 Spring 容器的存在,但是在实际开发中,我们往往还是需要 Spring 容器提供的各种能力,这样就迫使我们的 Bean 不得不去感知到 Spring 容器的存在。

江南一点雨的专栏 819

Spring 感知接口 学习笔记

一、什么是感知接口?​​ 是 Spring 框架提供的一组接口,​​,比如容器本身、Bean 名称、环境配置等。实现这些接口后,Spring 在初始化 Bean 时会​​,将相应的资源注入到 Bean 中。

七条鱼的博客 1036

Spring——Aware接口总结

文章目录Aware接口1. 什么是Aware接口?2.Aware 种类3.Aware 何时被调用? Aware接口 1. 什么是Aware接口? Aware接口从字面上翻译过来是感知捕获的含义。其实就是我们的bean去实现Aware子接口中的某个接口,然后Spring容器会帮我们创建对象注入到容器中。之后,在合适的时间,获取到这些对象,进行方法回调。 2.Aware 种类 Aware一共有12中种,每一种都有不同的作用。 接口 作用 BeanNameAware 这个方法只是简单的返回我们当前

zl13101758272的博客 943

Spring----Spring的IoC容器

一. Spring提供了两种容器类型:BeanFactory和ApplicationContext BeanFactory ApplicationContext 总结来说,实现BeanFactory接口的简单容器系列,只实现了容器的最基本功能;而ApplicationContext作为容器的高级形态存在,增加了许多面向框架的特性,同时对应用环境做了许多适配。 ...

weixin_34186950的博客 234
上一篇: Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法
下一篇: Spring 占位符解析器的作用 - PropertyPlaceholderHelper
努力突破
博客等级 码龄17年 36粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值