Spring Aware获取Bean和其他对象

Posted 流年的blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Aware获取Bean和其他对象相关的知识,希望对你有一定的参考价值。

  Spring的容器托管了所有bean,实际项目中我们经常会用到容器中的功能资源,这时候就用到了 Spring Aware。简单来说,就是Spring Aware可以帮助你获取到Spring容器中的Bean或者其他资源。

  Spring 提供的Aware接口如下:

    BeanNameAware          :获取到容器中Bean的名称

    BeanFactoryAware          :获得当前bean factory,这样可以调用容器的服务

    ApplicationContextAware*       :当前的ApplicationContext,这样可以调用容器的服务

    MessageSourceAware          :获得message source,这样可以获得文本信息

    ApplicationEventPublisherAware  :应用事件发布器,可以发布事件

    ResourceLoaderAware       :获得资源加载器,可以获得外部资源文件

  Spring Aware的目的是为了让Bean获得Spring容器的服务。因为ApplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以Bean继承ApplicationContextAware可以获得Spring容器的所有服务。

  例子:

/**
 * spring工具类,可获取spring容器中的bean
 * create by en
 * at 2019/1/23 16:43
 **/
@Component  // 必须是 spring bean 才能成功执行下面方法
public class SpringUtil implements BeanFactoryAware {       // 实现BeanFactoryAware,获取 BeanFactory

    private static BeanFactory beanFactory;

    // 重写 setBeanFactory 方法,获取 BeanFactory
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }

    public static <T> T getBean(Class<T> c) {
        return beanFactory.getBean(c);
    }

    public static <T> T getBean(String name) {
        return (T) beanFactory.getBean(name);
    }

}

但是需要注意Spring Aware本来就是Spring设计用来框架内部使用的,若使用了Spring Aware,你的Bean将会和Aware框架耦合。

以上是关于Spring Aware获取Bean和其他对象的主要内容,如果未能解决你的问题,请参考以下文章

spring中的aware接口

Spring Aware原理

Spring之Aware

Aware接口

想减少代码量,快设置一个有感知的 Aware Spring Bean

Spring Aware接口解析