面試準備-spring(持續更新)
1、BeanFactory 和 FactoryBean
BeanFactory是IOC最基本的容器,負責生產和管理bean,它為其他具體的IOC容器提供了最基本的規範,XmlBeanFactory,ApplicationContext 等具體的容器都是實現了BeanFactory,再在其基礎之上附加了其他的功能。
FactoryBean是一個介面,當在IOC容器中的Bean實現了FactoryBean後,通過getBean(String BeanName)獲取到的Bean物件並不是FactoryBean的實現類物件,而是這個實現類中的getObject()方法返回的物件。要想獲取FactoryBean的實現類,就要getBean(&BeanName),在BeanName之前加上&
3、Spring IOC 的理解,其初始化過程
a) IOC:Spring是開源框架,使用框架可以使我們減少工作量,提高工作效率並且它是分層結構,即相對應的層處理對應的業務邏輯,減少程式碼的耦合度。而spring的核心是IOC控制反轉和AOP面向切面程式設計。IOC控制反轉主要強調的是程式之間的關係是由容器控制的,容器控制物件,控制了對外部資源的獲取。而反轉即為,在傳統的程式設計中都是由我們建立物件獲取依賴物件,而在IOC中是容器幫我們建立物件並注入依賴物件,正是容器幫我們查詢和注入物件,物件是被獲取,所以叫反轉。
b) AOP:面向切面程式設計,主要是管理系統層的業務,比如日誌,許可權,事物等。AOP是將封裝好的物件剖開,找出其中對多個物件產生影響的公共行為,並將其封裝為一個可重用的模組,這個模組被命名為切面(aspect),切面將那些與業務邏輯無關,卻被業務模組共同呼叫的邏輯提取並封裝起來,減少了系統中的重複程式碼,降低了模組間的耦合度,同時提高了系統的可維護性。
4、Spring AOP的理解,各個術語,他們是怎麼相互工作的
通知的優先順序順序:在切面中宣告的順序就是優先順序(同類型),before是從高優先順序開始,after是從低優先順序開始
如果在不同的切面中定義多個通知響應同一個切點,進入時則優先順序高的切面類中的通知函式優先執行,退出時則最後執行,getOrder方法指定優先順序,數字越小,優先順序越高
靜態代理是編譯階段生成AOP代理類,也就是說生成的位元組碼就織入了增強後的AOP物件,代表是AspectJ
Spring AOP中的動態代理主要有兩種方式,JDK動態代理和CGLIB動態代理。JDK動態代理通過反射來接收被代理的類,並且要求被代理的類必須實現一個介面。JDK動態代理的核心是InvocationHandler介面和Proxy類。
如果目標類沒有實現介面,那麼Spring AOP會選擇使用CGLIB來動態代理目標類。CGLIB(Code Generation Library),是一個程式碼生成的類庫,可以在執行時動態的生成某個類的子類
5、Spring Bean 的生命週期,如何被管理的 Spring 只幫我們管理單例模式 Bean 的完整生命週期,spring對bean會儲存一份引用,對於scope為prototype的Bean,每次被呼叫都會new一個新的物件,期生命週期就交給呼叫方管理了,不再是Spring容器進行管理了 https://www.jianshu.com/p/3944792a5fff