1. 程式人生 > >Spring Aware獲取Bean和其他對象

Spring Aware獲取Bean和其他對象

create string imp 例子 必須 ride override 目的 creat

  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和其他對象