【springboot高级】(五:九大常用Aware实现、作用以及自定义实现类使用,例子:ApplicationContextAware (使用篇))

ApplicationContextAware、EnvironmentAware、ApplicationEventPublisherAware、BeanNameAware、BeanClassLoaderAware、BeanFactoryAware、EmbeddedValueResolverAware、ResourceLoaderAware、MessageSourceAware。

首先来介绍一下Aware:

指示bean有资格被特定框架对象的Spring容器,通过回调样式的方法。
实际的方法签名由各个子接口确定,但应该通常只包含一个接受单个参数的void返回方法。

上面这个是把该类上面的注释,复制到百度翻译的。

大白话:spring容器在启动过程中,他本身拥有一些资源(比如:我们的配置他封装成了对象,资源加载器),然后通过提供接口,用户去进行实现,springboot通过回调的方式,将其资源传递给用户。在实现Aware接口的时候,应该只包含一个方法,并且方法参数只有一个,没有返回值。
比如这个提供上下文的:

public interface ApplicationContextAware extends Aware {

	void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

}

那么我们就以提供上下文对象这个例子为例:ApplicationContextAware

1、编写一个类,实现ApplicationContextAware接口,并且覆盖其方法
2、定义一个内部成员,将其保存,后面需要用的时候直接获取
package com.osy.aware;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import java.util.Optional;

@Component
public class MyApplicationContextAware implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    /**
     * springboot会回调这个函数,
     * 他回调的时候,会将ApplicationContext对象传递给我们,那么我们就获取获取到他,并且做一些事情。
     * @param applicationContext
     * @throws BeansException
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Optional.ofNullable(this.applicationContext).orElse(this.applicationContext = applicationContext);
    }

    /**
     * 随便举个例子,使用ApplicationContext上下文的网上例子有很多,
     * 他的原理就是这样的
     */
    public <T> T getBean(String name, Class<T> requiredType) throws BeansException {
        return applicationContext.getBean(name, requiredType);
    }


}

文章开头例举的几个常用的Aware,这里就不一一举例了,将其作用以如下表格进行展示,需要时再来进行查看即可。

接口 作用
ApplicationContextAware 获取当前应用的上下文对象
EnvironmentAware 获取环境变量,包括我们配置的以及系统的
ApplicationEventPublisherAware 获取应用事件发布器,可以发布我们监听的事件
BeanNameAware 获取容器中的bean的名称
BeanClassLoaderAware 获取bean的类加载器
BeanFactoryAware 获取bean的创建工厂对象,如果我们要创建,可以试试通过他来创建
EmbeddedValueResolverAware 获取spring容器加载的properties文件属性值。
ResourceLoaderAware 获取资源加载器,我们要加载自己的资源,可以使用他。
MessageSourceAware 获取文本信息 ,解析消息。

猜你喜欢

转载自blog.csdn.net/qq_42154259/article/details/107137509