Spring中常用的那些接口

Spring的核心就是Bean管理,關於Bean定義了很多可擴展性的接口,通過這些擴展接口可以實現很多功能。

比如動態創建bean,延遲動態創建bean,動態注入bean,動態修改bean等等。

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

Bean管理

BeanFactory和ApplicationContext是Spring中最核心的接口。

BeanFactory

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

ApplicationContext

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

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 (only applicable when running in an application context)
  • ApplicationEventPublisherAware's setApplicationEventPublisher (only applicable when running in an application context)
  • MessageSourceAware's setMessageSource (only applicable when running in an application context)
  • ApplicationContextAware's setApplicationContext (only applicable when running in an application context)
  • ServletContextAware's setServletContext (only applicable when running in a web application context)

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中的屬性值。

Lifecycle

Spring容器的生命週期接口,Bean實現此接口後可以收到Spring生命週期變化的調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章