Spring注解学习_自动装配3_Aware注入Spring底层组件&原理

如果:自定义组件 想要使用 Spring容器底层的一些组件(如 ApplicationContext, BeanFactory, xxx)

那么:自定义组件 应当实现:xxxAware 接口 (如 ApplicationContextAware等),在创建对象的时候,会调用接口规定的方法注入相关组件

image-20200403160544918

这些 xxxAware 接口都继承自 Aware 空接口,我们看看它的定义:

A marker superinterface indicating that a bean is eligible to be notified by the Spring container of a particular framework object through a callback-style method. The actual method signature is determined by individual subinterfaces but should typically consist of just one void-returning method that accepts a single argument.

(一个标记超接口,指示bean有资格通过回调样式的方法获得Spring容器中特定框架对象的通知。实际的方法签名是由各个子接口决定的,但是通常应该只包含一个接受单个参数的空返回方法。)

通过实现xxxAware接口,可以把Spring底层的一些组件注入到我们自定义的Bean中。

新建Bean类:Red

@Component
public class Red implements ApplicationContextAware, BeanNameAware, EmbeddedValueResolverAware {
    private ApplicationContext applicationContext;
    
    @Override
    public void setBeanName(String name) {
        System.out.println("当前Bean的名字:"+name);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("传入的ioc:"+applicationContext);
        this.applicationContext=applicationContext;
    }

    @Override
    public void setEmbeddedValueResolver(StringValueResolver resolver) {
        String value = resolver.resolveStringValue("你好${os.name},我是#{100+11}");
        System.out.println("解析的字符串:"+value);
    }
}

测试时加载Spring容器过程中打印:

image-20200403162720325

原理:Spring使用xxxAwareProcessor即后置处理器来调用xxxAware接口实现的功能

Spring提供的每一个xxxAware都有它对应的xxxAwareProcessor

如:

image-20200403163212406

之前已经分析过,详见:Spring底层对BeanPostProcessor的使用


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,邮件至 708801794@qq.com

文章标题:Spring注解学习_自动装配3_Aware注入Spring底层组件&原理

文章字数:392

本文作者:梅罢葛

发布时间:2020-04-03, 15:53:40

最后更新:2020-04-03, 19:33:00

原始链接:https://qiurungeng.github.io/2020/04/03/Spring%E6%B3%A8%E8%A7%A3%E5%AD%A6%E4%B9%A0-%E8%87%AA%E5%8A%A8%E8%A3%85%E9%85%8D3-Aware%E6%B3%A8%E5%85%A5Spring%E5%BA%95%E5%B1%82%E7%BB%84%E4%BB%B6-%E5%8E%9F%E7%90%86/
目录
×

喜欢就点赞,疼爱就打赏