Spring面試題部分總結【慨念】
什麼是Spring?
spring是一個企業級應用的開源開發框架,主要用來開發java應用,spring框架目標就是簡化企業級應用開發。
Spring用到了那些設計模式?
spring裡面用到了大量的設計模式,這裡舉例比較有代表性的:
代理模式:在aop中使用比較多 單例模式:在spring配置檔案定義的bean預設為單例模式 模板模式:用來解決程式碼重複問題 工廠模式:BeanFactory用來建立物件的例項。
使用Spring框架有什麼好處?
1.輕量:spring是輕量的,基本版本大約2MB 2.控制反轉;spring通過這個實現了鬆散耦合,物件給他們依賴,而不是建立物件 3.spring支援面向切面的程式設計,並且把業務邏輯和系統服務分開 4.spring容器包含管理應用中物件的聲生命週期和配置
什麼是Spring IOC容器?
spring IOC 負責建立物件,管理物件(通過依賴注入),裝配物件,配置物件,並管理物件的生命週期
IOC的優點是什麼?
IOC 或 依賴注入把應用的程式碼量降到最低。它使應用容易測試,最小的代價和最小的侵入性使鬆散耦合得以實現
ApplicationContext通常實現的是什麼?
ClassPathXmlApplicationContext:此容器從一個xml檔案中載入beans的定義。xml bean 配置檔案的全路徑名必須提供給他的建構函式。 WebXmlApplicationContext:此容器載入一個xml檔案,此檔案定義了一個WEB應用的所有bean。
Spring有幾種配置方式?
基於xml的配置 基於註解的配置 基於java的配置
什麼是Spring的依賴注入?
依賴注入是ioc的一個方面,是指不需要你建立物件,只需要描述物件如何建立,你不在程式碼裡直接組裝你的元件和服務,但是要在配置檔案裡描述哪些元件需要哪些服務,之後一個容器(IOC容器)負責把他們組裝起來。
有哪些不同型別的IOC(依賴注入)方式?
構造器依賴注入:構造器依賴注入通過容器觸發一個類的構造器來實現的 setting:Setter方法注入是容器通過呼叫無參構造器或無參static工廠 方法例項化bean之後,呼叫該bean的setter方法,即實現了基於setter的依賴注入。
構造器引數實現強制依賴,setter方法實現可選依賴
解釋Spring支援幾種bean的作用域?
singleton:這是預設的,單例模式,不管有多少個請求,每個容器只有一個bean例項化 prototype:它和單例相反為每一個請求提供一個例項,原型模式 request:在每一個客服端的網路請求建立一個例項,在請求完成後,bean失效並垃圾回收器回收 session:確保每一個session中有一個bean例項,在session過期後,bean會隨之失效 global-session:在一個全域性的HTTP Session中,一個bean定義對應一個例項。該作用域僅在基於web的Spring ApplicationContext情形下有效。
Spring框架中的單例bean是執行緒安全的嗎?
肯定不是執行緒安全的,當多使用者同時請求一個服務時,容器會給每一個請求分配一個執行緒,這是多個執行緒會併發執行該請求多對應的業務邏輯(成員方法),此時就要注意了,如果該處理邏輯中有對該單列狀態的修改(體現為該單列的成員屬性),則必須考慮執行緒同步問題.
. 什麼是bean的自動裝配?
spring容器能夠自動裝配相互合作的bean,這意味著容器不需要<constructor-arg>和<property>配置,能通過Bean工廠自動處理bean之間的協作。
自動裝配有哪些侷限性 ?
重寫: 你仍需用 <constructor-arg>和 <property> 配置來定義依賴,意味著總要重寫自動裝配。 基本資料型別:你不能自動裝配簡單的屬性,如基本資料型別,String字串,和類。
什麼是基於java的Spring註解配置?請舉例
@Configuration註解,表示該類是一個配置類,用來定義bean資源 @bean:由@Bean註解的方法將會例項化、配置和初始化一個新物件,這個物件將由Spring的IoC容器來管理 ,@Bean宣告所起到的作用與<bean/> 元素類似
怎麼開啟註解配置
註解裝配預設是不開啟的,使用必須在配置檔案配置context:annotation-config/元素。
@Required 註解
這個註解表明bean的屬性必須在配置的時候設定,通過一個bean定義的顯示的屬性值或通過自動裝配,若@Required註解的bean屬性未被設定,容器將拋BeanInitializationException
@Autowired 註解
;通過型別來實現自動注入bean。和@Qualifier註解配合使用可以實現根據name注入bean
@Qualifier 註解
@Autowired一塊使用,在同一型別的bean有多個的情況下可以實現根據name注入的需求
@Resource 註解
預設是根據name注入bean的,可以通過設定型別來實現通過型別來注入
Spring框架支援的事務管理型別
spring支援兩種型別的事務管理: 程式設計式事務管理:通過程式設計的方式管理事務,但是極難維護 宣告式事務管理:可以將業務程式碼和事務管理分離,只需要註解和xml配置來管理事務。
你更傾向用那種事務管理型別?
大多數Spring框架的使用者選擇宣告式事務管理,因為它對應用程式碼的影響最小,因此更符合一個無侵入的輕量級容器的思想。宣告式事務管理要優於程式設計式事務管理,雖然比程式設計式事務管理(這種方式允許你通過程式碼控制事務)少了一點靈活性。
什麼是Aop
面向切面程式設計,是一種程式設計技術,允許程式模組化橫向切割關注點,如日誌和事務管理
在Spring AOP中關注點和橫切關注點有什麼不同?
關注點是一個模組的行為,一個關注點可能會被定義為我們想要實現的功能,橫切關注點是貫穿整個應用程式的關注點,並影響整個應用,比如日誌,資料傳輸
Spring有哪些不同通知型別?
通知是個在方法執行前或執行後要做的動作,實際上是程式執行時要通過SpringAOP框架觸發的程式碼段。
spring切面可以應用五種型別的通知: before:前置通知,在一個方法執行前呼叫 after:在方法執行後呼叫的通知,無論方法是否執行成功 after-returning:僅當方法執行完成後執行的通知 after-throwing:在方法丟擲異常退出時執行的通知 around在方法執行之前和執行之後都會執行的通知
Spring AOP 代理是什麼?
代理是使用非常廣泛的設計模式,代理是通知目標物件建立後的物件。
連線點(Joint Point)和切入點(Point cut)是什麼?
連線點是程式執行的一個點,例如,一個方法的執行或者一個異常的處理,一個連線點總是代表一個方法執行。舉例來說,所有定義在你的 EmpoyeeManager 介面中的方法都可以被認為是一個連線點,如果你在這些方法上使用橫切關注點的話。
切入點是一個匹配連線點的斷言或者表示式。Advice 與切入點表示式相關聯,並在切入點匹配的任何連線點處執行(比如,表示式 execution(* EmployeeManager.getEmployeeById(...)) 可以匹配 EmployeeManager 介面的 getEmployeeById() )
什麼是織入。什麼是織入應用的不同點?
織入是將切面和其他應用型別或物件連線或建立一個通知物件的過程。 織入可以在編譯時,載入時