日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring的aware学习

發(fā)布時(shí)間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring的aware学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(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)接口的方式)

@Autowired private MessageSource messageSource; @Autowired private ResourceLoader resourceLoader; @Autowired private ApplicationContext applicationContext;

還有Spring Aware本來就是Spring設(shè)計(jì)用來框架內(nèi)部使用的,如果使用了Spring Aware,你的Bean就會(huì)和Spring框架耦合。也就不能換容器了。

總結(jié)

以上是生活随笔為你收集整理的spring的aware学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。