spring-02前端
一、談談你對 Spring 的理解
Spring 是一個開源框架,爲簡化企業級應用開發而生。Spring 能夠是使簡單的 JavaBean 實現之前只有 EJB 才能實現的功能。Spring 是一個 IOC 和 AOP 容器框架。
Spring 容器的主要核心是
控制反轉(IOC)
傳統的 java 開發模式中,當須要一個對象時,咱們會本身使用 new 或者 getInstance 等直接或者間接調用構造方法建立一個對象。而在 spring 開發模式中,spring 容器使用了工廠模式爲咱們建立了所須要的對象,不須要咱們本身建立了,直接調用 spring 提供的對象就能夠了,這是控制反轉的思想。
依賴注入(DI)
spring 使用 javaBean 對象的 set 方法或者帶參數的構造方法爲咱們在建立所需對象時將其屬性自動設置所須要的值的過程,就是依賴注入的思想。
面向切面編程(AOP)
在面向對象編程(oop)思想中,咱們將事物縱向抽成一個個的對象。而在面向切面編程中,咱們將一個個的對象某些相似的方面橫向抽成一個切面,對這個切面進行一些如權限控制、事物管理,記錄日誌等公用操做處理的過程就是面向切面編程的思想。AOP 底層是動態代理,若是是接口採用 JDK 動態代理,若是是類採用CGLIB 方式實現動態代理。
二、Spring 中的設計模式
a:單例模式——spring 中兩種代理方式,若目標對象實現了若干接口,spring 使用 jdk 的 java.lang.reflect.Proxy類代理。若目標兌現沒有實現任何接口,spring 使用 CGLIB 庫生成目標類的子類。
單例模式——在 spring 的配置文件中設置 bean 默認爲單例模式。
b:模板方式模式——用來解決代碼重複的問題。
好比:RestTemplate、JmsTemplate、JpaTemplate
d:前端控制器模式——spring 提供了前端控制器 DispatherServlet 來對請求進行分發。
e:試圖幫助(view helper)——spring 提供了一系列的 JSP 標籤,高效宏來幫助將分散的代碼整合在試圖中。
f:依賴注入——貫穿於 BeanFactory/ApplacationContext 接口的核心理念。
g:工廠模式——在工廠模式中,咱們在建立對象時不會對客戶端暴露建立邏輯,而且是經過使用同一個接口來指向新建立的對象。Spring 中使用 beanFactory 來建立對象的實例。
三、Spring 的經常使用註解
Spring 在 2.5 版本之後開始支持註解的方式來配置依賴注入。能夠用註解的方式來代替 xml 中 bean 的描述。註解注入將會被容器在 XML 注入以前被處理,因此後者會覆蓋掉前者對於同一個屬性的處理結果。註解裝配在 spring 中默認是關閉的。因此須要在 spring 的核心配置文件中配置一下才能使用基於註解的裝配模式。配置方式以下:
註解裝配在默認狀況下是不開啓的,爲了使用註解裝配,咱們必須在Spring配置文件中配置 <context:annotation-config/>元素
經常使用的註解:
@Required:該註解應用於設值方法
@Autowired:該註解應用於有值設值方法、非設值方法、構造方法和變量。
@Qualifier:該註解和@Autowired 搭配使用,用於消除特定 bean 自動裝配的歧義。
四、 Spring bean 的生命週期
01)實例化一個Bean,也就是咱們一般說的new
02)按照Spring上下文對實例化的Bean進行配置,也就是IOC注入
03)若是這個Bean實現了BeanNameAware接口,會調用它實現的setBeanName(String beanId)方法,此處傳遞的是Spring配置文件中Bean的ID
04)若是這個Bean實現了BeanFactoryAware接口,會調用它實現的setBeanFactory(),傳遞的是Spring工廠自己(能夠用這個方法獲取到其餘Bean)
05)若是這個Bean實現了ApplicationContextAware接口,會調用setApplicationContext(ApplicationContext)方法,傳入Spring上下文,該方式一樣能夠實 現步驟4,但比4更好,覺得ApplicationContext是BeanFactory的子接口,有更多的實現方法
06)若是這個Bean關聯了BeanPostProcessor接口,將會調用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor常常被用做是Bean內容的更改,而且因爲這個是在Bean初始化結束時調用After方法,也可用於內存或緩存技術
07)若是這個Bean在Spring配置文件中配置了init-method屬性會自動調用其配置的初始化方法
08)若是這個Bean關聯了BeanPostProcessor接口,將會調用postAfterInitialization(Object obj, String s)方法
注意:以上工做完成之後就能夠用這個Bean了,那這個Bean是一個single的,因此通常狀況下咱們調用同一個ID的Bean會是在內容地址相同的實例
09)當Bean再也不須要時,會通過清理階段,若是Bean實現了DisposableBean接口,會調用其實現的destroy方法
10)最後,若是這個Bean的Spring配置中配置了destroy-method屬性,會自動調用其配置的銷燬方法
五、ApplicationContext 的實現類有哪些?
FileSystemXmlApplicationContext :此容器從一個 XML 文件中加載 beans 的定義,XML Bean 配置文件的全路徑名必須提供給它的構造函數。
ClassPathXmlApplicationContext:此容器也從一個 XML 文件中加載 beans 的定義,這裏,你須要正確設置classpath 由於這個容器將在 classpath 裏找 bean 配置。
WebXmlApplicationContext:此容器加載一個 XML 文件,此文件定義了一個 WEB 應用的全部 bean。
六、BeanFactory 與 AppliacationContext 有什麼區別
1)BeanFactory
基礎類型的 IOC 容器,提供完成的 IOC 服務支持。若是沒有特殊指定,默認採用延遲初始化策略。相對來講,容器啓動初期速度較快,所需資源有限。
2)ApplicationContext
ApplicationContext 是在 BeanFactory 的基礎上構建,是相對比較高級的容器實現,除了 BeanFactory 的全部支持外,ApplicationContext 還提供了事件發佈、國際化支持等功能。ApplicationContext 管理的對象,在容器啓動後默認所有初始化而且綁定完成。
七、在 Spring 中如何注入一個 java 集合?
Spring 提供如下幾種集合的配置元素:
<list>類型用於注入一列值,容許有相同的值。
<set> 類型用於注入一組值,不容許有相同的值。
<map> 類型用於注入一組鍵值對,鍵和值均可覺得任意類型。
<props>類型用於注入一組鍵值對,鍵和值都只能爲 String 類型。
八、在 Spring 框架中如何更有效地使用 JDBC?
使用 SpringJDBC 框架,資源管理和錯誤處理的代價都會被減輕。因此開發者只需寫 statements 和 queries 從數據存取數據,JDBC 也能夠在 Spring 框架提供的模板類的幫助下更有效地被使用,這個模板叫 JdbcTemplate 。
JdbcTemplate 類提供了不少便利的方法解決諸如把數據庫數據轉變成基本數據類型或對象,執行寫好的或可調用的數據庫操做語句,提供自定義的數據錯誤處理。
九、使用 Spring 經過什麼方式訪問 Hibernate?
在 Spring 中有兩種方式訪問 Hibernate:
1)控制反轉 HibernateTemplate 和 Callback。
2)繼承 HibernateDAOSupport 提供一個 AOP 攔截器。
java