幾道Spring 面試題

一、BeanFactory 接口和 ApplicationContext 接口有什麼區別?web

  • ApplicationContext 接口繼承BeanFactory接口
  • Spring核心工廠是BeanFactory
  • BeanFactory採起延遲加載,第一次getBean時纔會初始化Bean
  • ApplicationContext是會在加載配置文件時初始化Bean
  • ApplicationContext是對BeanFactory擴展
  • 開發中基本都在使用ApplicationContext, web項目使用WebApplicationContext ,不多用到BeanFactory

BeanFactory類結構體系:spring

  • BeanFactory接口及其子類定義了Spring IoC容器體系結構
  • BeanFactory體系很是的龐大和複雜
  • 要理解Spring IoC,須要先理清BeanFactory的繼承機構

ApplicationContext的結構體系:緩存

  • ApplicationContext接口是一個BeanFactory基礎上封裝了更多功能的
  • Spring中最爲經常使用的IoC容器,其包含兩個子接口:ConfigurableApplicationContext、WebApplicationContext

容器是spring的核心,使IoC管理全部和組件session

spring的兩種容器:   a、BeanFactoy
                                 b、ApplicationContext應用上下文框架

ApplicationContext:模塊化

                         a、提供文本信息解析,支持I18N
                         b、提供載入文件資源的通用方法
                         c、向註冊爲監聽器的Bean發送事件
                         d、ApplicationContext接口擴展BeanFactory接口
                         e、ApplicationContext提供附加功能.net

ApplicationContext的三個實現類:prototype

                                     a、ClassPathXmlApplication:把上下文文件當成類路徑資源
                                     b、FileSystemXmlApplication:從文件系統中的XML文件載入上下文定義信息3d

                                     c、XmlWebApplicationContext:從Web系統中的XML文件載入上下文定義信息代理

二、spring配置bean實例化有哪些方式?

  • 適合場景:

三、Spring Bean 做用域

  • singleton
  • prototype:根據經驗,對全部有狀態的bean應該使用prototype做用域,而對無狀態的bean則應該使用 singleton做用域
  • request
  • session
  • global session:該做用域僅在基於 web的Spring ApplicationContext情形下有效

四、Bean 的三中注入方式:

 

spring支持構造器注入和setter方法注入

    構造器注入,經過 <constructor-arg> 元素完成注入

    setter方法注入, 經過<property> 元素完成注入【開發中經常使用方式】

五、Spring AOP裏面的幾個名詞

切面(Aspect):

  • 一個關注點的模塊化,這個關注點可能會橫切多個對象,在普通類中以 @Aspect 註解(@AspectJ風格)來實現

鏈接點(Joinpoint)(能夠被攔截的方法):

  • 在程序執行過程當中某個特定的點,好比某方法調用的時候或者處理異常的時候。
  • 在Spring AOP中,一個鏈接點 老是 表明一個方法的執行。
  • 經過聲明一個org.aspectj.lang.JoinPoint類型的參數可使通知(Advice)的主體部分得到鏈接點信息

通知(Advice):

  • 在切面的某個特定的鏈接點(Joinpoint)上執行的動做。
  • 通知有各類類型,其中包括「around」、「before」和「after」等通知。 
  • 許多AOP框架,包括Spring,都是以攔截器作通知模型, 並維護一個以鏈接點爲中心的攔截器鏈。

切入點(Pointcut):

  • 匹配鏈接點(Joinpoint)的斷言。
  • 通知和一個切入點表達式關聯,並在知足這個切入點的鏈接點上運行(例如,當執行某個特定名稱的方法時)。 
  • 切入點表達式如何和鏈接點匹配是AOP的核心:Spring缺省使用AspectJ切入點語法。

引入(Introduction):(也被稱爲內部類型聲明(inter-type declaration))。

  • 聲明額外的方法或者某個類型的字段。 
  • Spring容許引入新的接口(以及一個對應的實現)到任何被代理的對象。
  • 例如,你可使用一個引入來使bean實現 IsModified 接口,以便簡化緩存機制。

目標對象(Target Object): 

  • 被一個或者多個切面(aspect)所通知(advise)的對象。
  • 也有人把它叫作 被通知(advised) 對象。 
  • 既然Spring AOP是經過運行時代理實現的,這個對象永遠是一個 被代理(proxied) 對象。

AOP代理(AOP Proxy): 

  • AOP框架建立的對象,用來實現切面契約(aspect contract)(包括通知方法執行等功能)。
  •  在Spring中,AOP代理能夠是JDK動態代理或者CGLIB代理。 
  • 注意:Spring 2.0最新引入的基於模式(schema-based)風格和@AspectJ註解風格的切面聲明,
  • 對於使用這些風格的用戶來講,代理的建立是透明的。

織入(Weaving):

  • 把切面(aspect)鏈接到其它的應用程序類型或者對象上,並建立一個被通知(advised)的對象。
  •  這些能夠在編譯時(例如使用AspectJ編譯器),類加載時和運行時完成。
  •  Spring和其餘純Java AOP框架同樣,在運行時完成織入。

六、通知有哪些類型?

前置通知(Before advice):

  • 在某鏈接點(join point)以前執行的通知,但這個通知不能阻止鏈接點前的執行(除非它拋出一個異常)。

返回後通知(After returning advice):

  • 在某鏈接點(join point)正常完成後執行的通知:例如,一個方法沒有拋出任何異常,正常返回。 

拋出異常後通知(After throwing advice):

  • 在方法拋出異常退出時執行的通知。 

後通知(After (finally) advice):

  • 當某鏈接點退出的時候執行的通知(不管是正常返回仍是異常退出)。 

環繞通知(Around Advice):

  • 包圍一個鏈接點(join point)的通知,如方法調用。
  • 這是最強大的一種通知類型。 
  • 環繞通知能夠在方法調用先後完成自定義的行爲。
  • 它也會選擇是否繼續執行鏈接點或直接返回它們本身的返回值或拋出異常來結束執行。
相關文章
相關標籤/搜索