当前位置 : 主页 > 编程语言 > java >

Spring5 IOC容器解析——Aware接口

来源:互联网 收集:自由互联 发布时间:2023-02-04
Aware Aware 是 Spring 中的一个根接口,继承该接口的子接口有很多,但是该接口没有任何方法,所以大家可以把它理解成一个标记接口:   Spring框架中提供了许多实现了Aware接口的类,这

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

上一篇:git 命令
下一篇:没有了
网友评论