首页 > 其他分享 >Spring5 IOC容器解析——Aware接口

Spring5 IOC容器解析——Aware接口

时间:2023-01-07 18:32:08浏览次数:65  
标签:applicationContext ApplicationContext Spring getBean 接口 Aware IOC Spring5

Aware

Aware 是 Spring 中的一个根接口,继承该接口的子接口有很多,但是该接口没有任何方法,所以大家可以把它理解成一个标记接口:

 

Spring框架中提供了许多实现了Aware接口的类,这些类主要是为了辅助Spring访问容器中的数据,比如BeanNameAware,这个类能够在Spring容器加载的过程中将Bean的名字(id)赋值给变量。

 

Spring Aware实现关系:

Spring Aware 以下是几个常用的接口:

  • 1、ApplicationContextAware:能获取Application Context调用容器的服务
  • 2、BeanNameAware:提供对BeanName进行操作
  • 3、ApplicationEventPublisherAware:主要用于事件的发布
  • 4、BeanClassLoadAware:相关的类加载器
  • 5、BeanFactoryAware:声明BeanFactory的
  • 6、MessageSourceAware:获取MessageSource
  • 7、ResourceLoaderAware:获取资源加载器,可以获得外部资源文件

ApplicationContextAware

ApplicationContext可以获取容器中的bean,但是必须注入才能使用,当一些类不能注入的时候怎么才能获得bean呢?比如Utils中的类,通常不能直接通过注入直接使用ApplicationContext,此时就需要借助ApplicationContextAware这个接口了。

 

ApplicationContextAware的实现类如下

/**
 * @author: huangyibo
 * @Date: 2019/10/25 23:48
 * @Description: 提供手动获取被spring管理的bean对象
 */
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = applicationContext;
        }
    }

    // 获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    // 通过name获取 Bean.
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    // 通过class获取Bean.
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    // 通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
}

配置了如上的工具类,那么就可以直接使用SpringUtil获取ApplicationContext对象了,而不需要注入了,如下:

StringRedisTemplate redisTemplate=SpringUtil.getBean("stringRedisTemplate",StringRedisTemplate.class);

SpringBoot整合Netty框架的时候,如果在Netty中的自定义Handler中要使用到Spring中的Bean的时候,因为无法直接将Bean注入到Netty中,所以就可以使用ApplicationContextAware接口了。

 

其他Spring Aware 接口的使用方法以此类推。

参考: https://zhuanlan.zhihu.com/p/68877265

标签:applicationContext,ApplicationContext,Spring,getBean,接口,Aware,IOC,Spring5
From: https://blog.51cto.com/u_14014612/5995711

相关文章

  • Spring5 IOC容器解析——事件监听机制
    一、事件驱动模型简介事件驱动模型,也即是我们通常说的观察者。基于发布-订阅模式的编程模型。概念定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖......
  • Spring5 IOC容器解析——BeanDefinitionReader
    概述BeanDefinitionReader的作用是读取Spring配置文件中的内容,将其转换为IOC容器内部的数据结构:BeanDefinition。在前面章节关于BeanDefinition的学习中有提到XmlB......
  • Spring5 IOC容器解析——BeanDefinition的注册
    前言在上一篇文章解析BeanDefinition对配置文件解析完成后,获取的beanDefiniton已经可以进行使用了,剩下的唯一工作就是注册了,也就是processBeanDefinition方法中的BeanDefi......
  • Spring IOC官方文档学习笔记(七)之Bean Definition继承
    1.BeanDefinition继承(1)Spring中的bean存在层级关系,我们可以定义子bean来继承或覆盖父bean中的某些属性,从而节省编码,在此处Spring运用到了模板设计模式,如下所示//自定......
  • ioctl(skfd, request, pwrq)
    /*------------------------------------------------------------------*//**WrappertoextractsomeWirelessParameteroutofthedriver*/staticinlinein......
  • spring5框架
    概述:Spring是轻量级的开源的JavaEE框架Spring可以解决企业应用开发的复杂性Spring有两个核心部分:IOC和AOPIOC:控制反转,把创建对象过程交给Spring进行管理AOP:面向切面......
  • Spring IOC官方文档学习笔记(六)之自定义bean的特性
    1.生命周期回调(1)如果我们想要介入bean的生命周期,可通过实现spring中的InitializingBean和DisposableBean接口来达到这一目的,spring会调用InitializingBean中的afterPro......
  • spring 基础知识-- IOC 和 DI 的配置和使用。
    目录​​一、基本概念​​​​二、Spring核心概念 ​​​​1、问题分析​​​​2、IOC、IOC容器、Bean、DI​​​​3、IOC入门案例​​​​4、DI入门案例​​​​三、IO......
  • Spring注解:使用注解的方式完成IOC
    补充:xml配置最开始(Spring1.x),Spring都是通过xml配置控制层(controller)--业务逻辑层(service)--dao层--数据源的关系,但是比较复杂Spring2.x的时候,随着JDK1.5支持注解的方式,......
  • Spring简介及IOC使用
     Spring介绍官网:https://spring.io/Spring是一个对象的容器,负责管理对象的创建、销毁,以及对象的属性注入,对象的之间的依赖关系。Spring可以整合其它框架,他基于IOC和AO......