Spring中Aware接口实现原理解析

开发 前端
项目中如果某些Bean中需要使用如ApplicationContext,Environment,BeanFactory等对象时我们都会去实现相关的Aware接口对象,然后就可以直接使用对应的对象了,今天我们就来开始它的实现原理。

[[399408]]

环境:Spring5.3.3 + Java8

项目中如果某些Bean中需要使用如ApplicationContext,Environment,BeanFactory等对象时我们都会去实现相关的Aware接口对象,然后就可以直接使用对应的对象了,今天我们就来开始它的实现原理。

使用示例:

  1. @Component 
  2. public class BeanAware implements ApplicationContextAware { 
  3.  
  4.     private ApplicationContext ctx ; 
  5.      
  6.     @Override 
  7.     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
  8.         this.ctx = applicationContext ; 
  9.         System.out.println(this.ctx) ; 
  10.     } 
  11.  

 入口函数:

  1. public static void main(String[] args) { 
  2.         AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("com.pack") ; 
  3.         ctx.getBean(BeanAware.class) ; 
  4.         ctx.close(); 
  5.     } 

正如上面这样只要你实现对应的*Aware接口就可以使用相应的接口对象了。

先来看看Aware接口的层级结构:

接着我们查看

AnnotationConfigApplicationContext的父类AbstractApplicationContext

在父类中,有如下方法:

上面选中的就是处理Aware相关接口类了。查看这类

  1. class ApplicationContextAwareProcessor implements BeanPostProcessor 

该类是个Bean后处理器,在bean实例化及依赖注入完成后、在任何初始化代码(比如配置文件中的init-method)调用之前调用和初始化代码调用之后调用

在初始化之前方法中先检查Bean是否是响应Aware接口的子类,如果不是直接返回;否则进入invokeAwareInterfaces方法

到这里你应该知道了Aware的底层原理了吧

完毕!!!

 

责任编辑:姜华 来源: 今日头条
相关推荐

2010-06-18 15:33:19

UML接口

2020-05-21 13:25:43

Spring组件架构

2017-08-22 16:40:22

前端JavaScript接口

2010-07-08 10:28:51

UML接口

2024-06-27 08:26:10

LooperAndroid内存

2023-02-28 09:07:18

ChatGPTAI

2020-09-22 12:00:23

Javahashmap高并发

2019-12-06 10:59:20

JavaScript运行引擎

2021-01-12 14:46:34

Kubernetes开发存储

2021-07-12 09:45:36

NameServer 核心Conusmer

2021-07-05 07:51:43

JVM底层Python

2009-11-09 16:57:05

WCF托管特性

2010-01-26 09:50:30

C++接口

2023-12-26 08:08:02

Spring事务MySQL

2009-07-06 17:36:06

ResultSetJDBC Connec

2021-06-03 10:01:28

JDBCStatement接口

2023-08-11 07:44:40

TCP滑动窗口数据

2021-12-01 18:36:35

属性

2024-01-29 08:00:00

架构微服务开发

2021-06-22 10:24:22

Statement接口修改数据删除数据
点赞
收藏

51CTO技术栈公众号