ioc是spring的基礎,即控制反轉。springboot基於註解使用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
@ComponentScan源碼閱讀springboot
主要方法 | 說明 |
---|---|
basePackages | 掃描的包路徑 |
basePackageClasses | 掃描的javaConfig類 |
includeFilters | 包含的bean的過濾器 |
excludeFilters | 排除的bean的過濾器 |
lazyInit | 是否延遲初始化 |
javaConfig方式主要是增長@Configuration 和 @Bean註解來發布;session
xml方式須要經過註解@ImportResource來引入
經過@Autowired來描述經過@Primary和@Quelifier來消除歧義。app
具體的依賴注入方式有 屬性,構造函數,方法;函數
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()}")
做用域 | 說明 |
---|---|
singleton | 單例,全局惟一 |
prototype | 原型,每次建立 |
session | 每一個http會話建立一個 |
application | 同單例 |
request | 每次請求建立一個 |
指明不一樣環境下啓用的bean,springboot不一樣的profile對應不一樣的application-profile.yaml文件;
原創不易,轉載請註明出處,歡迎溝通交流。