Spring Aware獲取Bean和其他對象
阿新 • • 發佈:2019-01-23
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和其他對象