IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring——Aware接口总结 -> 正文阅读

[Java知识库]Spring——Aware接口总结

Aware接口

1. 什么是Aware接口?

Aware接口从字面上翻译过来是感知捕获的含义。其实就是我们的bean去实现Aware子接口中的某个接口,然后Spring容器会帮我们创建对象注入到容器中。之后,在合适的时间,获取到这些对象,进行方法回调。

2.Aware 种类

Aware一共有12中种,每一种都有不同的作用。

接口作用
BeanNameAware这个方法只是简单的返回我们当前的beanName,听官方的意思是这个接口更多的使用在spring的框架代码中,实际开发环境应该不建议使用
BeanClassLoaderAware获取Bean的类装载器,
BeanFactoryAware获取bean工厂,beanFactory让你可以不依赖注入方式,随意的读取IOC容器里面的对象,不过beanFactory本身还是要注入的。需要注意的是,一般情况下我们都用 @Component 注解,如果使用 @Configuration 注解的话,setBeanFactory方法会执行2次;
EnvironmentAware实现了EnvironmentAware接口重写setEnvironment方法后,在工程启动时可以获得application.properties 、xml、yml 的配置文件配置的属性值。
EmbeddedValueResolverAware通常我们使用@Value注解来获取properties 和 yml 文件中的值,每个类中都要使用@Value也很繁琐,实现EmbeddedValueResolverAware接口后就方便多了。用法也跟@Value一样,需要用${}包裹住;
ResourceLoaderAwareSpring ResourceLoader为我们提供了一个统一的getResource()方法来通过资源路径检索外部资源。从而将资源或文件(例如文本文件、XML文件、属性文件或图像文件)加载到Spring应用程序上下文中的不同实现 ,其实说白了,就是用来加载外部资源的;方法中有个参数:ResourceLoader ,这个参数其实就是ApplicationContext(spring 的上下文对象);可直接强转;
ApplicationEventPublisherAwareApplicationEventPublisherAware是一个事件发布器的接口,使用这个接口,我们自己的 Service 就拥有了发布事件的能力。用户注册后,不再是显示调用其他的业务 Service,而是发布一个用户注册事件。那么在这里是发布事件,那就肯定有监听事件的接口,这个接口叫做 ApplicationListener ,只要实现 ApplicationListener 接口就可以接受发布的事件了,接下来我们写一个示例来模拟发布事件和监听事件;
MessageSourceAware国际化消息通知操作
ApplicationContextAwareApplicationContextAware 主要用来全局获取 ApplicationContext 上下文,ApplicationContext其实就是容器,为此我们可以实现 ApplicationContextAware 接口来获取ApplicationContext容器对象;我们可以把它做成一个公共的静态类,这样可以在任意地方想拿就拿了
ServletContextAware通过实现ServletContextAware接口可获取servletContext,也就是servlet的上下文;什么是ServletContext : WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
LoadTimeWeaverAware其实在调试的时候还有2个没打印出来,第11个就是 LoadTimeWeaver, 简称LTW,LTW是AOP的一种实现方式,此方法是为了获取Aop织入的对象,使用的织入方式是:类加载期织入,一般的aop都是运行期织入,就是在运行的时候才进行织入切面方法,但是LTW是在类加载前就被织入了,也就是class文件在jvm加载之前进行织入切面方法只有在使用 @EnableLoadTimeWeaving 或者存在 LoadTimeWeaver 实现的 Bean 时才会调用,顺序也很靠后;
ImportAware还有一个没打印的就是ImportAware接口,这个接口的方法只有被其他配置类 @Import(XX.class) 时才会调用,这个调用对XX.class 中的所有 @Bean 来说顺序是第 1 的。

3.Aware 何时被调用?

bean如果实现了Aware的某个接口,就会被调用。其实是分为两种:

  1. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeAwareMethods 这个方法的通知
    在这里插入图片描述
    这几个接口,会每次都会检查调用。如果bean实现了其中的某个接口就会执行。

  2. org.springframework.context.support.ApplicationContextAwareProcessor#postProcessBeforeInitialization 后置处理器,调用。
    在这里插入图片描述
    在这里插入图片描述
    由上可以看出,这几个接口是在bean的后置处理器中进行的。会首先判断是否实现一堆接口中的某个接口。如果实现了再进行调用。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:02:30  更:2021-07-15 16:04:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 21:34:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码