Spring回调接口Aware-源码分析

Spring的Aware接口提供了一种框架内部使用的机制,使得在实例化时能感知容器中的组件。回调主要分为两种方式:(1)在Bean创建后调用,执行如BeanFactoryAware等接口的回调;(2)由BeanPostProcessor实现,例如ApplicationContextAware对应的回调。在Bean初始化过程中,这些回调方法会被相应处理。
摘要由CSDN通过智能技术生成

title: Spring回调接口Aware-源码分析
date: 2020-04-24 21:37:27
tags:


Spring提供了一种机制,让bean在实例化的时候,能够感知(获取)容器中的一些组件,即Aware接口回调的方式。这种机制一般是Spring框架内部使用。

Aware z作用
BeanFactoryAware 获取当前 BeanFactory,这样可以调用容器的服务
ApplicationContextAware t同BeanFactory
MessageSourceAware 获取 Message Source 相关文本信息
ApplicationEventPublisherAware 发布事件
ResourceLoaderAware 获取资源加载器,这样获取外部资源文件
BeanNameAware 获取容器中 Bean 的名称
示例
@Component
public class AwareTest implements ApplicationContextAware , BeanNameAware {
   
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
   
        System.out.println("取得applicationContext。。。。");
    }

    public void setBeanName(String name) {
   
        System.out.println(name);
    }
}
原理

在这些Aware中,底层实现主要分为两种:

  • invokeAwareMethods(beanName, bean);

  • BeanPostProcessor

(1)invokeAwareMethods(beanName, bean);

在创建bean的核心方法initializeBean中,创建好bean后,都会先调用invokeAwareMethods(beanName, bean);,再进行初始化。

若这个bean为一个Aware,就去尝试调用一些回调方法。

在这个方法中,有三种Aware会在这个方法中被调用:BeanNameAwareBeanClassLoaderAwareBeanFactoryAware

//
if (bean instanceof Aware) {
   
			if (bean instanceof BeanNameAware) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值