spring的aware学习
簡(jiǎn)介
Spring提供的Aware接口能讓Bean感知Spring容器的存在,即讓Bean在初始化就可以使用Spring容器所提供的資源。
在spring中有許多繼承aware接口的,常見的有:
| ApplicationContextAware | 能獲取Application Context調(diào)用容器的服務(wù) | 常用 |
| ApplicationEventPublisherAware | 應(yīng)用事件發(fā)布器,可以用來發(fā)布事件 | |
| BeanClassLoaderAware | 能獲取加載當(dāng)前Bean的類加載器 | |
| BeanFactoryAware | 能獲取Bean Factory調(diào)用容器的服務(wù) | |
| BeanNameAware | 能獲取當(dāng)前Bean的名稱 | |
| EnvironmentAware | 能獲取當(dāng)前容器的環(huán)境屬性信息 | 常用 |
| MessageSourceAware | 能獲取國(guó)際化文本信息 | 常用 |
| ResourceLoaderAware | 獲取資源加載器讀取資源文件 |
常見用法
有時(shí)候會(huì)通過工具類的形式提供相應(yīng)的能力如:
@Component//也要被spring管理 public class EventPublisherUtil implements ApplicationEventPublisherAware {private static ApplicationEventPublisher eventPublisher;@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {if(eventPublisher == null){eventPublisher = applicationEventPublisher;}}/*** @description 發(fā)布事件*/public static void publishEvent(ApplicationEvent event){eventPublisher.publishEvent(event);} }經(jīng)常會(huì)使用到利用ApplicationContext 來獲取bean,如下
public class SpringUtil implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if(context == null){context = applicationContext;}}public static ApplicationContext getApplicationContext(){return context;}public static Object getBean(String name){return context.getBean(name);}public static <T> T getBean(Class<T> requiredType){return context.getBean(requiredType);}public static <T> T getBean(String name, Class<T> tclass){return context.getBean(name,tclass);}public static <T> Collection<T> fetchInteClassByT(Class<T> classes){return context.getBeansOfType(classes).values();}/*** @description 發(fā)布event*/public static void publishEvent(ApplicationEvent event){getApplicationContext().publishEvent(event);}}因?yàn)锳pplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以Bean繼承ApplicationContextAware可以獲得Spring容器的所有服務(wù),但是,原則上我們還是用到什么接口了,就實(shí)現(xiàn)什么接口。我們也需要在工作多總結(jié),體會(huì)這些不同aware的使用場(chǎng)景,不斷積累進(jìn)步。
注意
除了通過實(shí)現(xiàn)Aware結(jié)尾接口獲取spring內(nèi)置對(duì)象,也可以通過@Autowired注解直接注入相關(guān)對(duì)象,如下:
(如果需要用到靜態(tài)方法中,如工具方法,還是采用實(shí)現(xiàn)接口的方式)
還有Spring Aware本來就是Spring設(shè)計(jì)用來框架內(nèi)部使用的,如果使用了Spring Aware,你的Bean就會(huì)和Spring框架耦合。也就不能換容器了。
總結(jié)
以上是生活随笔為你收集整理的spring的aware学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里巴巴java开发手册学习
- 下一篇: ActiveMq消费端实现集群部署