更新時間:2020-03-17 10:35:53 來源:動力節(jié)點 瀏覽2580次
BeanFactory和ApplicationContext有什么區(qū)別
>BeanFactory可以理解為含有bean集合的工廠類。BeanFactory包含了種bean的定義,以便在接收到客戶端請求時將對應(yīng)的bean實例化。
>BeanFactory還能在實例化對象的時生成協(xié)作類之間的關(guān)系。此舉將bean自身與bean客戶端的配置中解放出來。BeanFactory還包含了bean生命周期的控制,調(diào)用客戶端的初始化方法(initializationmethods)和銷毀方法(destructionmethods)。
>從表面上看,applicationcontext如同beanfactory一樣具有bean定義、bean關(guān)聯(lián)關(guān)系的設(shè)置,根據(jù)請求分發(fā)bean的功能。但applicationcontext在此基礎(chǔ)上還提供了其他的功能。
>提供了支持國際化的文本消息
>統(tǒng)一的資源文件讀取方式
>已在監(jiān)聽器中注冊的bean的事件
SpringBean的生命周期
>SpringBean的生命周期簡單易懂。在一個bean實例被初始化時,需要執(zhí)行一系列的初始化操作以達到可用的狀態(tài)。同樣的,當一個bean不在被調(diào)用時需要進行相關(guān)的析構(gòu)操作,并從bean容器中移除。
>Springbeanfactory負責(zé)管理在spring容器中被創(chuàng)建的bean的生命周期。Bean的生命周期由兩組回調(diào)(callback)方法組成。
>初始化之后調(diào)用的回調(diào)方法。
>銷毀之前調(diào)用的回調(diào)方法。
>Spring框架提供了以下四種方式來管理bean的生命周期事件:
>InitializingBean和DisposableBean回調(diào)接口
>針對特殊行為的其他Aware接口
>Bean配置文件中的Custominit()方法和destroy()方法
>@PostConstruct和@PreDestroy注解方式
SpringIOC如何實現(xiàn)
>Spring中的org.springframework.beans包和org.springframework.context包構(gòu)成了Spring框架IoC容器的基礎(chǔ)。
>BeanFactory接口提供了一個先進的配置機制,使得任何類型的對象的配置成為可能。ApplicationContex接口對BeanFactory(是一個子接口)進行了擴展,在BeanFactory的基礎(chǔ)上添加了其他功能,比如與Spring的AOP更容易集成,也提供了處理messageresource的機制(用于國際化)、事件傳播以及應(yīng)用層的特別配置,比如針對Web應(yīng)用的WebApplicationContext。
>org.springframework.beans.factory.BeanFactory是SpringIoC容器的具體實現(xiàn),用來包裝和管理前面提到的各種bean。BeanFactory接口是SpringIoC容器的核心接口。
說說SpringAOP
>面向切面編程,在我們的應(yīng)用中,經(jīng)常需要做一些事情,但是這些事情與核心業(yè)務(wù)無關(guān),比如,要記錄所有update*方法的執(zhí)行時間時間,操作人等等信息,記錄到日志,
>通過spring的AOP技術(shù),就可以在不修改update*的代碼的情況下完成該需求。
SpringAOP實現(xiàn)原理
>SpringAOP中的動態(tài)代理主要有兩種方式,JDK動態(tài)代理和CGLIB動態(tài)代理。JDK動態(tài)代理通過反射來接收被代理的類,并且要求被代理的類必須實現(xiàn)一個接口。JDK動態(tài)代理的核心是InvocationHandler接口和Proxy類。
>如果目標類沒有實現(xiàn)接口,那么SpringAOP會選擇使用CGLIB來動態(tài)代理目標類CGLIB(CodeGenerationLibrary),是一個代碼生成的類庫,可以在運行時動態(tài)的生成某個類的子類,注意,CGLIB是通過繼承的方式做的動態(tài)代理,因此如果某個類被標記為final,那么它是無法使用CGLIB做動態(tài)代理的。
動態(tài)代理(cglib與JDK)
>JDK動態(tài)代理類和委托類需要都實現(xiàn)同一個接口。也就是說只有實現(xiàn)了某個接口的類可以使用Java動態(tài)代理機制。但是,事實上使用中并不是遇到的所有類都會給你實現(xiàn)一個接口。因此,對于沒有實現(xiàn)接口的類,就不能使用該機制。而CGLIB則可以實現(xiàn)對類的動態(tài)代理。
Spring事務(wù)實現(xiàn)方式
>1、編碼方式
>所謂編程式事務(wù)指的是通過編碼方式實現(xiàn)事務(wù),即類似于JDBC編程實現(xiàn)事務(wù)管理。
>2、聲明式事務(wù)管理方式
>聲明式事務(wù)管理又有兩種實現(xiàn)方式:基于xml配置文件的方式;另一個實在業(yè)務(wù)方法上進行@Transaction注解,將事務(wù)規(guī)則應(yīng)用到業(yè)務(wù)邏輯中
Spring事務(wù)底層原理
>a、劃分處理單元——IOC
>由于spring解決的問題是對單個數(shù)據(jù)庫進行局部事務(wù)處理的,具體的實現(xiàn)首相用spring中的IOC劃分了事務(wù)處理單元。并且將對事務(wù)的各種配置放到了ioc容器中(設(shè)置事務(wù)管理器,設(shè)置事務(wù)的傳播特性及隔離機制)。
>b、AOP攔截需要進行事務(wù)處理的類
>Spring事務(wù)處理模塊是通過AOP功能來實現(xiàn)聲明式事務(wù)處理的,具體操作(比如事務(wù)實行的配置和讀取,事務(wù)對象的抽象),用TransactionProxyFactoryBean接口來使用AOP功能,生成proxy代理對象,通過TransactionInterceptor完成對代理方法的攔截,將事務(wù)處理的功能編織到攔截的方法中。讀取ioc容器事務(wù)配置屬性,轉(zhuǎn)化為spring事務(wù)處理需要的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(TransactionAttributeSourceAdvisor),轉(zhuǎn)化為TransactionAttribute表示的數(shù)據(jù)對象。
>c、對事物處理實現(xiàn)(事務(wù)的生成、提交、回滾、掛起)
>spring委托給具體的事務(wù)處理器實現(xiàn)。實現(xiàn)了一個抽象和適配。適配的具體事務(wù)處理器:DataSource數(shù)據(jù)源支持、hibernate數(shù)據(jù)源事務(wù)處理支持、JDO數(shù)據(jù)源事務(wù)處理支持,JPA、JTA數(shù)據(jù)源事務(wù)處理支持。這些支持都是通過設(shè)計PlatformTransactionManager、AbstractPlatforTransaction一系列事務(wù)處理的支持。為常用數(shù)據(jù)源支持提供了一系列的TransactionManager。
>d、結(jié)合
>PlatformTransactionManager實現(xiàn)了TransactionInterception接口,讓其與TransactionProxyFactoryBean結(jié)合起來,形成一個Spring聲明式事務(wù)處理的設(shè)計體系。
以上就是動力節(jié)點Java培訓(xùn)機構(gòu)小編介紹的“最新java程序員框架面試題”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀