0101-ioc

背景

ioc是spring的基礎,即控制反轉。springboot基於註解使用ioc.

ioc

spring稱全部被管理的對象爲 bean,
spring ioc主要經過描述的方式完成3類bean的管理工做:
基本功能 說明
發佈對象 包掃描業務bean,javaConfig或者xml的方式配置第三方bean
獲取對象 BeanFactory或者ApplicationContext的子類獲取bean
依賴注入對象 經過關鍵字@Autowired,屬性注入,構造函數注入,方法注入
spring ioc的核心接口是BeanFactory和ApplicationContext ;
BeanFactory ApplicationContext
獲取bean的方法 等同
判斷是不是單例或者原型 等同
類型匹配 等同
獲取bean的類型和別名 等同
-- MessageResource消息國際化功能
-- EnvironmentCapable環境可配置
-- ApplicationEventPublisher應用事件發佈
-- ResourcePatternResolver資源模式解析

來個例子,發佈和獲取bean; java

TODOspring

經過@ComponentSacn發佈Bean

@ComponentScan源碼閱讀springboot

主要方法 說明
basePackages 掃描的包路徑
basePackageClasses 掃描的javaConfig類
includeFilters 包含的bean的過濾器
excludeFilters 排除的bean的過濾器
lazyInit 是否延遲初始化

javaConfig方式或者xml方式定義第三方Bean發佈

javaConfig方式主要是增長@Configuration 和 @Bean註解來發布;session

xml方式須要經過註解@ImportResource來引入

條件裝配bean @Conditional(Condition實現類)

依賴注入

經過@Autowired來描述

經過@Primary和@Quelifier來消除歧義。app

具體的依賴注入方式有 屬性,構造函數,方法;函數

bean的生命週期

bean定義 -> bean初始化 ->bean生存期->bean銷燬spring-boot

bean定義:經過@ComponentScan掃描獲得資源信息,從資源中解析出定義信息,而後把定義發佈到spring容器中;post

bean的初始化:建立bean,完成依賴注入,setBeanName,setBeanFactory,@PostConstruct標註的方法,postProcessorBeforeInitialzerion方法,setApplicationContext方法,afterPropertiesSet方法,postProcessorAfterInitialization方法;prototype

bean生存期: 運行階段直接使用xml

bean銷燬: @PreDesctroy標註的方法,destory方法;

生命週期相關的擴展接口 說明
BeanNameAware 設置bean的名稱
BeanFactoryAware 獲取BeanFactory
ApplicationContextAware 獲取ApplicationContext
InitializingBean 初始化bean
DisposableBean 銷燬bean
BeanPostProcessor 全部ben的公共加強

屬性文件

引入依賴:

spring-boot-configuration-processor;
而後使用@Value(「${xxx}」)來引用便可;

或者經過@ConfigurationProperties(「xxx」)直接組裝到自定義類中;

還能夠使用SpringEL來處理屬性配置:

@Value("#{T(System).currentTimeMillis()}")

Bean做用域

做用域 說明
singleton 單例,全局惟一
prototype 原型,每次建立
session 每一個http會話建立一個
application 同單例
request 每次請求建立一個

Profile

指明不一樣環境下啓用的bean,springboot不一樣的profile對應不一樣的application-profile.yaml文件;

原創不易,轉載請註明出處,歡迎溝通交流。
本站公眾號
   歡迎關注本站公眾號,獲取更多信息