目錄:
- 第一題 ApplicationContext和BeanFactory有什么區別?
- 第二題 Spring中的事務是如何實現的?
- 第三題 Spring中什么時候@Transactional會失效?
- 第四題 Spring容器啟動流程是怎樣的?
- 第五題 Spring Boot、Spring MVC 和 Spring 有什么區別?
第一題 ApplicationContext和BeanFactory有什么區別?
BeanFactory是Spring中?常核?的組件,表示Bean??,可以?成Bean,維護Bean,?ApplicationContext繼承了BeanFactory,所以ApplicationContext擁有BeanFactory所有的特點,也是?個Bean??,但是ApplicationContext除開繼承了BeanFactory之外,還繼承了諸如EnvironmentCapable、MessageSource、ApplicationEventPublisher等接?,從?ApplicationContext還有獲取系統環境變量、國際化、事件發布等功能,這是BeanFactory所不具備的
第二題 Spring中的事務是如何實現的?
- Spring事務底層是基于數據庫事務和AOP機制的
- ?先對于使?了@Transactional注解的Bean,Spring會創建?個代理對象作為Bean
- 當調?代理對象的?法時,會先判斷該?法上是否加了@Transactional注解
- 如果加了,那么則利?事務管理器創建?個數據庫連接
- 并且修改數據庫連接的autocommit屬性為false,禁?此連接的?動提交,這是實現Spring事務?
常重要的?步 - 然后執?當前?法,?法中會執?sql
- 執?完當前?法后,如果沒有出現異常就直接提交事務
- 如果出現了異常,并且這個異常是需要回滾的就會回滾事務,否則仍然提交事務
- Spring事務的隔離級別對應的就是數據庫的隔離級別
- Spring事務的傳播機制是Spring事務??實現的,也是Spring事務中最復雜的
- Spring事務的傳播機制是基于數據庫連接來做的,?個數據庫連接?個事務,如果傳播機制配置為
需要新開?個事務,那么實際上就是先建??個數據庫連接,在此新數據庫連接上執?sql
第三題 Spring中什么時候@Transactional會失效?
因為Spring事務是基于代理來實現的,所以某個加了@Transactional的?法只有是被代理對象調?時,
那么這個注解才會?效,所以如果是被代理對象來調?這個?法,那么@Transactional是不會失效的。
同時如果某個?法是private的,那么@Transactional也會失效,因為底層cglib是基于??類來實現
的,?類是不能重載?類的private?法的,所以?法很好的利?代理,也會導致@Transactianal失效
第四題 Spring容器啟動流程是怎樣的?
- 在創建Spring容器,也就是啟動Spring時:
- ?先會進?掃描,掃描得到所有的BeanDefinition對象,并存在?個Map中
- 然后篩選出?懶加載的單例BeanDefinition進?創建Bean,對于多例Bean不需要在啟動過程中去進
?創建,對于多例Bean會在每次獲取Bean時利?BeanDefinition去創建 - 利?BeanDefinition創建Bean就是Bean的創建?命周期,這期間包括了合并BeanDefinition、推斷構造?法、實例化、屬性填充、初始化前、初始化、初始化后等步驟,其中AOP就是發?在初始化后這?步驟中
- 單例Bean創建完了之后,Spring會發布?個容器啟動事件
- Spring啟動結束
- 在源碼中會更復雜,?如源碼中會提供?些模板?法,讓?類來實現,?如源碼中還涉及到?些BeanFactoryPostProcessor和BeanPostProcessor的注冊,Spring的掃描就是通過BenaFactoryPostProcessor來實現的,依賴注?就是通過BeanPostProcessor來實現的
- 在Spring啟動過程中還會去處理@Import等注解
第五題 Spring Boot、Spring MVC 和 Spring 有什么區別?
spring是?個IOC容器,?來管理Bean,使?依賴注?實現控制反轉,可以很?便的整合各種框架,提供AOP機制彌補OOP的代碼重復問題、更?便將不同類不同?法中的共同處理抽取成切?、?動注?給?法執?,?如?志、異常等
springmvc是spring對web框架的?個解決?案,提供了?個總的前端控制器Servlet,?來接收請求,然后定義了?套路由策略(url到handle的映射)及適配執?handle,將handle結果使?視圖解析技術?成視圖展現給前端
springboot是spring提供的?個快速開發?具包,讓程序員能更?便、更快速的開發spring+springmvc應?,簡化了配置(約定了默認配置),整合了?系列的解決?案(starter機制)、redis、mongodb、es,可以開箱即?
如果我的內容對你有幫助,請點贊,評論,收藏。創作不易,大家的支持就是我堅持下去的動力