Spring中經常使用的那些接口

Spring的核心就是Bean管理,關於Bean定義了不少可擴展性的接口,經過這些擴展接口能夠實現不少功能。spring

好比動態建立bean,延遲動態建立bean,動態注入bean,動態修改bean等等。框架

下面介紹Spring中一些經常使用的接口:ui

Bean管理

BeanFactory和ApplicationContext是Spring中最核心的接口,先放一張核心類圖:
imagespa

BeanFactory

這是Spring中最核心的接口,也是根接口。定義了獲取bean及bean基礎屬性的相關方法。此接口須要從新實現的場景很是少,通常是Spring內部配置,程序中注入/獲取使用便可。code

經常使用方法:繼承

  • getBean 根據beanId/beanClass獲取Bean
  • containsBean bean是否已加載
  • isSingleton 是不是單例
  • isTypeMatch 類型是否匹配
  • getType 獲取bean class
  • getAliases 獲取bean別名

ApplicationContext

繼承瞭如下接口:
ApplicationEventPublisher, BeanFactory, EnvironmentCapable, HierarchicalBeanFactory, ListableBeanFactory, MessageSource, ResourceLoader, ResourcePatternResolver
同時也實現了以上接口的全部功能,程序中經過此接口就可使用以上接口的功能。接口

經常使用方法:生命週期

  • getId 獲取spring容器ID
  • getApplicationName 獲取應用明
  • getDisplayName 獲取displayName
  • getStartupDate 獲取啓動時間
  • getAutowireCapableBeanFactory 獲取autowire的beanFactory

Aware接口

Aware:adj. 意識到的。在程序中通常表明自動發現(我的理解),在Spring中的功能就是自動注入。
Spring定義了一批Aware接口,被Spring管理的Bean只須要實現XXAware接口,就能夠獲取相對應的資源。下面是一些經常使用的Aware接口極其做用:事件

  • BeanNameAware's setBeanName
  • BeanClassLoaderAware's setBeanClassLoader
  • BeanFactoryAware's setBeanFactory
  • EnvironmentAware's setEnvironment
  • EmbeddedValueResolverAware's setEmbeddedValueResolver
  • ResourceLoaderAware's setResourceLoader
  • ApplicationEventPublisherAware's setApplicationEventPublisher
  • MessageSourceAware's setMessageSource
  • ApplicationContextAware's setApplicationContext
  • ServletContextAware's setServletContext (僅適用於Spring Web環境下)

Bean生命週期

FactoryBean(建立Bean)

若是一個Bean實現了此接口,那麼該Bean將不直接做爲最終Bean的實例,而是把實現的getObject方法返回做爲最終的實例。資源

此接口在框架內部大量使用,例如AOP ProxyFactoryBean或JndiObjectFactoryBean,它也能夠用於定製組件。Dubbo中也經過此接口來實現動態加載生產者,具體參考com.alibaba.dubbo.config.spring.ReferenceBean

InitializingBean(初始化Bean)

若是Bean實現了此接口,在Bean建立完成以後會調用afterPropertiesSet方法,程序能夠經過此接口方法作一些初始化相關的工做。

BeanPostProcessor(後置處理Bean)

Factory Hook,容許自定義修改新的Bean實例。執行順序在afterPropertiesSet以後。
能夠經過此接口實現動態/依賴配置Bean的功能,例如Dubbo中消費者經過@Reference引用生產者,具體參考com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor

DisposableBean(銷燬Bean)

當Spring容器關閉時會進行全部Bean的銷燬,若Bean實現了此接口,則銷燬時會調用destroy方法。程序能夠經過此接口完成一些依賴關閉的功能。

其餘

Environment

當前應用正在運行環境的接口,經過此接口能夠得到配置文件和屬性。該接口還繼承了PropertyResolver,能夠獲取placeholder中的屬性值。
經常使用方法

  • getActiveProfiles 獲取當前激活的環境
  • getDefaultProfiles 獲取當前默認環境
  • acceptsProfiles 檢測環境是否處於激活狀態
  • containsProperty 是否包含屬性key
  • getProperty 根據key獲取屬性
  • getRequiredProperty 根據key獲取屬性,若值不存在則拋出IllegalStateException
  • resolvePlaceholders 處理el表達式,並獲取對應值。例如:傳入${spring.profiles.active},就能夠獲取對應值。跟getProperty不一樣的是,getProperty須要的是具體key名稱,而不是表達式。
  • resolveRequiredPlaceholders 同resolvePlaceholders,不過值不存在會拋出IllegalStateException

Lifecycle

Spring容器的生命週期接口,Bean實現此接口後能夠收到Spring生命週期變化的調用。
經常使用方法:

  • start 啓動事件
  • stop 中止事件
  • isStarted 判斷是否啓動
相關文章
相關標籤/搜索