简介

Spring提供的Aware接口能让Bean感知Spring容器的存在,即让Bean在初始化就可以使用Spring容器所提供的资源。
在spring中有许多继承aware接口的,常见的有:

接口 作用 备注
ApplicationContextAware 能获取Application Context调用容器的服务 常用
ApplicationEventPublisherAware 应用事件发布器,可以用来发布事件
BeanClassLoaderAware 能获取加载当前Bean的类加载器
BeanFactoryAware 能获取Bean Factory调用容器的服务
BeanNameAware 能获取当前Bean的名称
EnvironmentAware 能获取当前容器的环境属性信息 常用
MessageSourceAware 能获取国际化文本信息 常用
ResourceLoaderAware 获取资源加载器读取资源文件

常见用法

有时候会通过工具类的形式提供相应的能力如:

@Component//也要被spring管理
public class EventPublisherUtil implements ApplicationEventPublisherAware {private static ApplicationEventPublisher eventPublisher;@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {if(eventPublisher == null){eventPublisher = applicationEventPublisher;}}/*** @description  发布事件*/public static void publishEvent(ApplicationEvent event){eventPublisher.publishEvent(event);}
}

经常会使用到利用ApplicationContext 来获取bean,如下

public class SpringUtil implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if(context == null){context = applicationContext;}}public static ApplicationContext getApplicationContext(){return context;}public static Object getBean(String name){return context.getBean(name);}public static <T> T getBean(Class<T> requiredType){return context.getBean(requiredType);}public static <T> T getBean(String name, Class<T> tclass){return context.getBean(name,tclass);}public static <T> Collection<T> fetchInteClassByT(Class<T> classes){return context.getBeansOfType(classes).values();}/*** @description  发布event*/public static void publishEvent(ApplicationEvent event){getApplicationContext().publishEvent(event);}}

因为ApplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以Bean继承ApplicationContextAware可以获得Spring容器的所有服务,但是,原则上我们还是用到什么接口了,就实现什么接口。我们也需要在工作多总结,体会这些不同aware的使用场景,不断积累进步。

注意

除了通过实现Aware结尾接口获取spring内置对象,也可以通过@Autowired注解直接注入相关对象,如下:
(如果需要用到静态方法中,如工具方法,还是采用实现接口的方式)

@Autowired
private MessageSource messageSource; @Autowired
private ResourceLoader resourceLoader; @Autowired
private ApplicationContext applicationContext;

还有Spring Aware本来就是Spring设计用来框架内部使用的,如果使用了Spring Aware,你的Bean就会和Spring框架耦合。也就不能换容器了。

spring的aware学习相关推荐

  1. 今天,我要教妹子学会Spring:Aware、异步编程、计划任务

    来源 | 沉默王二 教妹子学 Spring,没见过这么放肆的标题吧? 作者我有一个漂亮如花的妹妹(见封面图,别问我怎么又变了?还不能一天做个梦了?),她叫什么呢?我想聪明的读者能猜得出:沉默王三,没错 ...

  2. Spring 各种 Aware 接口回调注入

    Spring bean 实现了如下 Aware 接口,可以注入相关对象: BeanFactoryAware, //获取 IoC 容器 BeanFactory 的能力 ApplicationContex ...

  3. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  4. Spring文档学习

    Spring文档学习 参考Spring Framework Documentation学习 1. IoC 容器 1.1 容器实例化 <beans><import resource=& ...

  5. spring源码学习之路---深入AOP(终)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章和各位一起看了一下sp ...

  6. Spring Boot的学习之路(03):基础环境搭建,做好学习前的准备工作

    1. 前言 <论语·魏灵公>:"工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者." 工欲善其事必先利其器.我们在熟悉一个陌生项目的时候,首先会大概去看一 ...

  7. Spring Web Service 学习之Hello World篇

    http://fuxueliang.iteye.com/blog/175184 Spring Web Service是Spring社区基于Spring提供的一个关注于创建"文档驱动" ...

  8. spring三大核心学习

    转载自 http://blog.csdn.net/yks0527/article/details/54093490 spring三大核心学习 spring是一个轻型容器(light-weight Co ...

  9. spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring

    本节主要内容: 1:通过代码演示实现零XML配置spring 2:使用重点注解理解 声明: 本文是<凯哥陪你学系列-框架学习之spring boot框架学习>中spring boot框架学 ...

最新文章

  1. Xstream解析报文
  2. selenium +chrome headless Manual 模式渲染网页
  3. 如何自学python数据分析-『』python数据分析该怎么入门呢?
  4. 逻辑漏洞-token绕过
  5. python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host=‘‘, port=80): Max retries e
  6. 创业号官网自建系统软件 v3.1
  7. 基础总结篇之二:Activity的四种launchMode
  8. Java EnumMap工作原理及实现
  9. 图像形状特征(七)--Zernike矩
  10. c fun函数求n个整数的平均值_OOP 面向对象编程:由 C 到 C++
  11. java表情包_大佬 java表情包 - 大佬 java微信表情包 - 大佬 javaQQ表情包 - 发表情 fabiaoqing.com...
  12. “今天星期五“-SAP SE09/STMS 请求号传输中遇到的错误及解决方案
  13. 网络安全--风险评估
  14. Contextual Transformer Networks for Visual Recognition
  15. 项目实训个人报告(二)
  16. 增值电信业务经营许可证怎么办理icp许可证
  17. PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected.
  18. Python代码写一个玫瑰花
  19. 记录Linux下安装elasticSearch时遇到的一些错误
  20. html各种弹出框和提示框

热门文章

  1. 异步和同步区别是什么_一次相亲经历,我彻底搞懂了什么叫阻塞非阻塞,同步异步...
  2. bga焊盘怎么做_BGA封装的类型及焊盘设计的基本要求有哪些
  3. php jquery ajax裁剪图照片,php+jquery+ajax无刷新图片上传裁切,模拟flash头像上传实例...
  4. java如何解决高并发症,一整套Java线上故障排查技巧,爱了!
  5. 计算机错误2 找不到指定文件,无法执行目录中的文件 错误2系统找不到指定文件怎么办?...
  6. 【小白学习C++ 教程】一、Vscode和 Visual stdudio配置C++环境
  7. 七十二、Vuex实现双父组件数据共享、localStorage、mapActions和keep-alive
  8. 深度解读NLP文本情感分析Pipeline
  9. 回归理性 务实推进 迎接AI新时代 2018中国人工智能大会完美收官
  10. 用好这几款炼丹利器,调参从此得心应手 | Let's Fork