1. 程式人生 > >面試題談談你對spring的理解

面試題談談你對spring的理解

1、spring為什麼出現。     

      spring的出現是為了解耦,我們在學習java初期,相信很多小夥伴都使用的是JSP+Servlet+MySQL+JDBC技術,在操作dao層的時候,每次都需要例項化一次,這樣是不是就很繁瑣;有的人可能使用單例模式來解決這個問題,但業務程式碼與單例模式的模板程式碼放在一個類裡而且也會出現大量重複的單例模式的模板程式碼,耦合性較高,要知道java語言可是高內聚,低耦合的;所以偉大的Spring就出現了,也就是類似於資料庫連線池的東西。下面著重介紹這個框架。

2、理解Sping

      傳統Java SE程式設計,我們直接在物件內部通過new進行建立物件或者getInstance等直接或者間接呼叫構造方法建立一個物件;而在Spring開發模式中,Spring容器使用了工廠模式為我們建立了所需要的物件(這個過程就是DI通過setter方法在配置中注入物件),我們使用時不需要自己去建立,直接呼叫Spring為我們提供的物件即可,這就是控制反轉的思想。例項化一個java物件有三種方式:使用類構造器,使用靜態工廠方法,使用例項工廠方法,當使用spring時我們就不需要關心通過何種方式例項化一個物件,spring通過控制反轉機制自動為我們例項化一個物件。

3、面向切面AOP

     在面向物件程式設計(OOP)思想中,我們將事物縱向抽象成一個個的物件。而在面向切面程式設計中,我們將一個個物件某些類似的方面橫向抽象成一個切面,對這個切面進行一些如許可權驗證,事物管理,記錄日誌等公用操作處理的過程就是面向切面程式設計的思想。

4、Spring支援的幾種bean的作用域。

       Spring框架支援以下五種bean的作用域: singleton : bean在每個Spring ioc 容器中只有一個例項。 prototype:一個bean的定義可以有多個例項。 request:每次http請求都會建立一個bean,該作用域僅在基於web的Spring ApplicationContext情形下有效。 session:在一個HTTP Session中,一個bean定義對應一個例項。該作用域僅在基於web的Spring ApplicationContext情形下有效。 global-session:在一個全域性的HTTP Session中,一個bean定義對應一個例項。該作用域僅在基於web的Spring ApplicationContext情形下有效

5、使用Spring框架的好處是什麼。

輕量:Spring 是輕量的,基本的版本大約2MB。 控制反轉:Spring通過控制反轉實現了鬆散耦合,物件們給出它們的依賴,而不是建立或查詢依賴的物件們。 面向切面的程式設計(AOP):Spring支援面向切面的程式設計,並且把應用業務邏輯和系統服務分開。 容器:Spring 包含並管理應用中物件的生命週期和配置。 MVC框架:Spring的WEB框架是個精心設計的框架,是Web框架的一個很好的替代品。 事務管理:Spring 提供一個持續的事務管理介面,可以擴充套件到上至本地事務下至全域性事務(JTA)。 異常處理:Spring 提供方便的API把具體技術相關的異常(比如由JDBC,Hibernate or JDO丟擲的)轉化為一致的unchecked 異常。    

6、spring配置bean例項化有哪些方式。


1)使用類構造器例項化(預設無引數)

  <bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean>  

2)使用靜態工廠方法例項化(簡單工廠模式)
//下面這段配置的含義:呼叫Bean2Factory的getBean2方法得到bean2

 <bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2"></bean>  

3)使用例項工廠方法例項化(工廠方法模式)

//先建立工廠例項bean3Facory,再通過工廠例項建立目標bean例項

<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"></bean>
 <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>