Spring底层组件xxxAware家族

2023-10-27

搞懂xxxAware家族对理解Spring源码和提高代码能力也有帮助。

Spring中常见xxxAware接口列举如下:

  • ApplicationContextAware
  • BeanNameAware
  • EmbeddedValueResolverAware
  • EnvironmentAware
  • MessageSourceAware
  • ResourceLoaderAware
1、ApplicationContextAware

ApplicationContextAware的作用就是通过它,spring可以把上下文环境对象ApplicationContext注入进来,然后通过ApplicationContext对象来得到Spring容器中的bean,做一些应用级别的事情。

简而言之:ApplicationContextAware是用来获取ApplicationContext对象的。


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * 类说明:演示使用 ApplicationContextAware 获取配置文件的属性
 */
@PropertySource(value = "classpath:/test.properties")
@Component
public class Plane implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    public Plane() {
        System.out.println("Plane.......constructor");
    }

    @PostConstruct
    public void init() {
        System.out.println("Plane.......init........@PostConstruct");
        Environment environment = applicationContext.getEnvironment();
        String property = environment.getProperty("bird.color");
        System.out.println("Plane...... bird.color=" + property);
    }

    @PreDestroy
    public void destroy() {
        System.out.println("Plane......destroy........@PreDestroy");
    }

    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        // 容器初始化,将applicationContext传进来,那么其他方法就可使用到IOC容器了
        // 这个方法是ApplicationContextAwareProcessor的
        this.applicationContext = context;
    }
}

写测试类 验证一下:

package org.xiaobuisme.example;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.xiaobuisme.example.cap8.Plane;

public class Cap8Test {
    public static void main(String[] args) {
        // 验证 实现 ApplicationContextAware的接口后,如何使用 applicationContext获取配置文件变量
        AnnotationConfigApplicationContext anno = new AnnotationConfigApplicationContext(Plane.class);
        // 打印出 Plane...... bird.color=blue
        // 说明 此种方式 可以使用applicationContext进行操作
        anno.close();
    }
}

输出结果:

Plane.......constructor
Plane.......init........@PostConstruct
Plane...... bird.color=blue
九月 08, 2023 11:12:55 上午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@5fa7e7ff: startup date [Fri Sep 08 11:12:55 CST 2023]; root of context hierarchy
Plane......destroy........@PreDestroy
2、BeanNameAware

用来获取当前bean的名称的

3、EmbeddedValueResolverAware 

用来解析表达式的

4、EnvironmentAware

用来获取环境变量的

5、MessageSourceAware

用来做国际化的

6、ResourceLoaderAware

用来加载资源文件的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring底层组件xxxAware家族 的相关文章

  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • try-with-resources 中出现死代码警告,但翻译后的 try-catch-finally 中没有出现死代码警告

    以下代码使用try 有资源 https docs oracle com javase specs jls se7 html jls 14 html jls 14 20 3Java 8 中引入的构造 偶尔抛出 方法被声明为抛出一个偶尔的异常
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐

  • air724UG + Luat玩转物联网(四) 定时器

    luat已经将定时器封装入sys模块 每创建一个任务就会消耗一个定时器 最大不能超过32个 一 luat定时器使用方法 1 sys timerStart fnc ms 开启一个定时器 参数 参数 释义 fnc fnc 定时器回调函数 ms
  • React项目 管理后台页面框架搭建

    使用 antd 这个框架搭建 使用 Layout 进行页面布局 在文件夹 component 创建一个新的组件 叫做Frame 然后里面在创建一个叫做index js 这是我们管理后台的一个大的布局结构 在index js 里添加代码 首先
  • 【拍照画面异常问题的 buffer dump和处理】

    当拍照遇到画面异常问题 建议先dump拍照对应的raw yuv和jpeg 一 Dump拍照对应的raw图 1 Non zsl拍照 Non zsl拍照会让P1node重新出raw图 而拍照会用到这些raw图中的imgo buffer 1 1
  • Pycharm设置终端自动进入当前python环境

    这里写自定义目录标题 设置Pycharm中的Powershell终端 powershell初始化 设置Pycharm中的Powershell终端 使用系统自带powershell的请忽略此步 在设置 工具 终端中设置默认powershell
  • 人生苦短,Python是岸——别了!Python之父!

    就在7月12日 著名的Python之父Guido van Rossum正式退出Python核心决策层 他在邮件里有点生气又有点伤心的写道 现在PEP 572已经完成 我不再想为一个PEP这么努力争取 而且还发现有这么多人鄙视我的决定 这个完
  • label+input 选择(优化多选按钮)及 input实现全选反选

    1 多选 选择之后不同的背景 input中 id和label中 for对应的值必须相同
  • Tomcat 8和10的安装和修改

    Tomcat10 jdk11没有jre目录了 tomcat安装后需要做一些修改 JAVA HOME usr local jdk11 JAVA BIN JAVA HOME bin export JAVA BIN JAVA HOME bin e
  • 全网最全系统学习爬虫教程,用爬虫进行数据分析(bs4,xpath,正则表达式)

    1 bs4解析基础 2 bs4案例 3 xpath解析基础 4 xpath解析案例 4k图片解析爬取 5 xpath解析案例 58二手房 6 xpath解析案例 爬取站长素材中免费简历模板 7 xpath解析案例 全国城市名称爬取 8 正则
  • jwt 非对称加密 密钥生成

    1 生成证书 有效期 100年 2 证书的名称 pubKey 3 证书生成需要的盐值 7018 z1 在java项目中使用rsa非得对称加密 只需要生成的 证书 pubKey jks以及生成的公钥 私钥一般用不到 如果加密和解密只需要公钥和
  • vs2017试用延长期已到_将Windows 7试用版从30天延长到120天

    vs2017试用延长期已到 Did you know that you can install Windows 7 without any license key and use it for 30 days What you might
  • STM32学习心得(二)点亮LED灯

    STM32学习心得 二 点亮LED灯 在创建好工程模板后 就可以开始真正进入STM32的学习 手下那当然是试着点亮一个LED灯 首先在USER目录下创建一个空文件夹 并命名为bsp led bsp的意思是板级支持包 即该代码仅支持这块板子
  • Git搭建个人博客

    Git搭建个人博客 很多人都有写博客的习惯 所以我这篇博客就讲解一下如何在git上搭建一个个人的博客 环境 搭建个人博客需要配置配置一下环境 这里我是使用win10来搭建的 因为像这种配置或者搭建东西 一般都是win系统比较麻烦 在mac和
  • Sqlilabs-16

    相较于第 15 关 单引号变成了双引号 括号 查列 uname admin and if ascii substr select group concat table name from information schema tables
  • bash: /root/.bashrc: 行 102: 语法错误: 未预期的文件结尾

    问题描述 解决方案 在添加内容的末尾加上fi
  • idea使用sonarlint插件

    JDH 邹老板 一 插件安装 由于是内网环境 根据自己安装的idea版本 去官网下载离线插件包进行离线安装 我的idea是IntelliJ IDEA 2020 2 3 安装包如下 二 sonarlint服务器配置 插件安装完成之后 在设置里
  • YaRN: Efficient Context Window Extension of Large Language Models

    本文是LLM系列文章 针对 YaRN Efficient Context Window Extension of Large Language Models 的翻译 YaRN 大型语言模型的有效上下文窗口扩展 摘要 1 引言 2 背景和相关
  • zookeeper版本选择与配置参数调优

    一 zookeeper 发布策略 Apache ZooKeeper 社区一次支持两个发布分支 stable和current ZooKeeper的稳定版本是 3 7 x 当前版本是 3 8 x 一旦发布新的次要版本 稳定版本预计将很快退役 大
  • 使用开散列实现对字典的查找插入删除(C++实现)

    一 需求分析 问题描述 实现对字典的查找 基本要求 在分块查找 AVL树 哈希查找 B树或者B 树查找中选择一种你认为最高效的动态查找方法对字典 单词 词性加释义 在内存中的动态查找结构或者在外存的字典文件的构造 查找 插入 删除 逻辑操作
  • JVM常见命令之JPS

    1 JPS Java Virtual Machine Process Status JDK1 5提供的显示当前所有进程pid的命令 2 jps q 只输出pid 3 jps l 输出应用程序main class 的完整package名或者应
  • Spring底层组件xxxAware家族

    搞懂xxxAware家族对理解Spring源码和提高代码能力也有帮助 Spring中常见xxxAware接口列举如下 ApplicationContextAware BeanNameAware EmbeddedValueResolverAw