1.Spring工程的啟動流程:
Spring工程的啟動流程主要包括以下幾個步驟:
- 加載配置文件:Spring會讀取配置文件(如XML配置文件或注解配置)來獲取應(yīng)用程序的配置信息。
- 實例化并初始化IoC容器:Spring會創(chuàng)建并初始化IoC容器,即ApplicationContext。在這一步,Spring會解析配置文件,并將配置的Bean實例化。
- 實例化并初始化Bean:Spring根據(jù)配置信息實例化Bean,并完成Bean的依賴注入和初始化(例如調(diào)用構(gòu)造函數(shù)、屬性設(shè)置和初始化回調(diào)等)。
- 完成Bean的初始化:在所有Bean實例化后,Spring會執(zhí)行Bean的初始化回調(diào)方法(如果有定義的話)。
- 應(yīng)用程序使用:容器啟動后,應(yīng)用程序可以使用通過容器管理的Bean來完成相應(yīng)的業(yè)務(wù)邏輯。
2.Spring Bean的生命周期:
Spring Bean的生命周期包括以下幾個階段:
- 實例化:容器實例化Bean對象。
- 屬性賦值:容器注入Bean的屬性值和依賴。
- 初始化:Bean進行一些初始化操作,可以自定義初始化方法。
- 使用:Bean可供應(yīng)用程序使用。
- 銷毀:容器關(guān)閉時,銷毀Bean,可以自定義銷毀方法。
3.Spring給我們開發(fā)人員提供了哪些擴展點?
Spring提供了以下擴展點:
- BeanPostProcessor:可以在Bean實例化和初始化前后對Bean進行自定義處理。
- BeanFactoryPostProcessor:可以在容器實例化和配置所有Bean之后,對BeanFactory進行自定義處理。
- InitializingBean和DisposableBean:用于在Bean的初始化和銷毀階段執(zhí)行一些額外操作。
- @PostConstruct和@PreDestroy:通過注解方式定義Bean的初始化和銷毀方法。
- BeanDefinitionRegistryPostProcessor:用于在Bean定義加載前對BeanDefinition進行自定義處理。
4.Spring如何管理事務(wù)?
Spring通過AOP(面向切面編程)和事務(wù)管理器來管理事務(wù)。
- 在Spring中,我們可以通過@Transactional注解或XML配置來標(biāo)記事務(wù)的邊界。
- 當(dāng)方法被@Transactional注解標(biāo)記時,Spring將為該方法創(chuàng)建一個事務(wù),并在方法執(zhí)行前后啟動和提交事務(wù)。如果方法拋出異常,則會回滾事務(wù)。Spring使用事務(wù)管理器來處理底層數(shù)據(jù)庫事務(wù)的提交和回滾。
5.Spring是如何解決循環(huán)依賴問題的?
Spring使用了三個主要的解決循環(huán)依賴的機制:
-
提前暴露Bean(Early Bean Post-Processors):Spring容器在創(chuàng)建Bean實例的過程中,會提前暴露尚未完全初始化的Bean實例。這意味著在創(chuàng)建Bean的過程中,即使發(fā)生循環(huán)依賴,也能夠獲取到尚未初始化的Bean實例的引用,從而解決了循環(huán)依賴的問題。
-
三級緩存(Three-Level Cache):Spring使用三級緩存來處理循環(huán)依賴。在創(chuàng)建Bean的過程中,Spring首先會將正在創(chuàng)建的Bean實例放入第一級緩存。然后,它會創(chuàng)建Bean的實例并放入第二級緩存,但在實例化之前,會解析依賴關(guān)系并注入尚未初始化的Bean引用。最后,當(dāng)Bean實例完全創(chuàng)建并初始化后,它會放入第三級緩存。通過使用三級緩存,Spring能夠在創(chuàng)建Bean實例的過程中解決循環(huán)依賴的問題。
-
通過代理實現(xiàn)解決循環(huán)依賴(通過CGLIB創(chuàng)建代理對象):當(dāng)Spring檢測到循環(huán)依賴無法通過前兩種方式解決時,它會嘗試使用代理對象來解決循環(huán)依賴。對于需要循環(huán)依賴的Bean,Spring會創(chuàng)建一個代理對象來代替原始的Bean實例。當(dāng)其他Bean依賴于該Bean時,Spring會注入這個代理對象。代理對象在真正被調(diào)用時,會觸發(fā)Spring創(chuàng)建并注入真正的Bean實例,從而解決了循環(huán)依賴的問題。
6.Spring中的事務(wù)傳播行為有哪些?
Spring定義了以下事務(wù)傳播行為:
required supports文章來源:http://www.zghlxwxcb.cn/news/detail-523848.html
REQUIRED:如果當(dāng)前存在事務(wù),則加入該事務(wù),如果不存在,則新建一個事務(wù)。
SUPPORTS:如果當(dāng)前存在事務(wù),則加入該事務(wù),如果不存在,則以非事務(wù)方式執(zhí)行。
MANDATORY:要求當(dāng)前存在事務(wù),如果不存在則拋出異常。
REQUIRES_NEW:新建一個事務(wù),并掛起當(dāng)前事務(wù)(如果存在)。
NOT_SUPPORTED:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則掛起該事務(wù)。
NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
NESTED:如果當(dāng)前存在事務(wù),則在嵌套事務(wù)中執(zhí)行,如果不存在,則執(zhí)行與REQUIRED相同的行為。文章來源地址http://www.zghlxwxcb.cn/news/detail-523848.html
到了這里,關(guān)于spring工程的啟動流程?bean的生命周期?提供哪些擴展點?管理事務(wù)?解決循環(huán)依賴問題的?事務(wù)傳播行為有哪些?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!