Spring面試題總結包含《69》

Spring面試題總結包含《69》

網上發現有個Spring面試相關的《史上最全 69 道 Spring 面試題和答案》,也沒夠69題將就看吧,拿過來學習學習,借鑑一下!如有侵權,聯繫刪除![email protected]

  1. 什麼是Spring?
  2. 使用Spring框架的好處?
  3. Spring模塊
  4. 核心容器(應用上下文)模塊
  5. BeanFactory
  6. XMLBeanFactory
  7. AOP
  8. JDBC抽象和DAO模塊
  9. 解釋對象/關係映射集成模塊
  10. 解釋WEB模塊
  11. Spring配置文件
  12. Spring IOC容器
  13. IOC優點
  14. ApplicationContext通常的實現是什麼?
  15. Bean 工廠和 Application contexts  有什麼區別?
  16. Spring依賴注入
  17. 有哪些不同類型的IOC(依賴注入)方式?
  18. 哪種依賴注入方式你建議使用,構造器注入,還是 Setter方法注入?
  19. 什麼是Spring beans
  20.  一個 Spring Bean 定義 包含什麼?
  21. 如何給Spring 容器提供配置元數據?
  22. 你怎樣定義類的作用域?
  23. 解釋Spring支持的幾種bean的作用域
  24. Spring框架中的單例bean是線程安全的嗎?
  25. 解釋Spring框架中bean的生命週期
  26.  哪些是重要的bean生命週期方法? 你能重載它們嗎?
  27. 什麼是Spring的內部bean?
  28. 在 Spring中如何注入一個java集合?
  29. 什麼是bean裝配?
  30. 什麼是bean的自動裝配?
  31. 解釋不同方式的自動裝配
  32. 自動裝配有哪些侷限性?
  33. 你可以在Spring中注入一個null 和一個空字符串嗎?
  34. 什麼是基於Java的Spring註解配置? 給一些註解的例子
  35. 什麼是基於註解的容器配置?
  36. 怎樣開啓註解裝配?
  37. @Required  註解
  38. @Autowired 註解
  39. @Qualifier 註解
  40. 在Spring框架中如何更有效地使用JDBC?
  41. JdbcTemplate
  42. Spring對DAO的支持
  43. 使用Spring通過什麼方式訪問Hibernate?
  44. Spring支持的ORM
  45. 如何通過HibernateDaoSupport將Spring和Hibernate結合起來?
  46. Spring支持的事務管理類型
  47. Spring框架的事務管理有哪些優點?
  48. 你更傾向用那種事務管理類型?
  49. 解釋AOP
  50. Aspect 切面
  51. 在Spring AOP 中,關注點和橫切關注的區別是什麼?
  52. 連接點
  53. 切點
  54. 什麼是引入?
  55. 什麼是目標對象?
  56. 什麼是代理?
  57. 有幾種不同類型的自動代理?
  58. 什麼是織入。什麼是織入應用的不同點?
  59. 解釋基於XML Schema方式的切面實現
  60. 解釋基於註解的切面實現
  61. 什麼是Spring的MVC框架?
  62. DispatcherServlet
  63. WebApplicationContext
  64. 什麼是Spring MVC框架的控制器?
  65. @Controller 註解
  66. @RequestMapping 註解
  67. SpringAOP動態代理
  68. Spring 框架中都用到了哪些設計模式?
  69. Spring事務的實現方式和實現原理
  70. Spring的事務傳播行爲
  71. Spring中的隔離級別
  72. BeanFactory和ApplicationContext有什麼區別?

 

答案:

  1. 什麼是Spring?
  1. Spring是一個高度靈活的輕量級框架,其目的是降低企業級應用開發的複雜度。
  2. Spring 可以是使簡單的 JavaBean 實現以前只有 EJB 才能實現的功能。( EJB是一個用來構築企業級應用的服務器端可被管理組件)
  3. Spring 是一個 IOC 和 AOP 容器框架。
  4. 待補充。

 

  1. 使用Spring框架的好處?
  1. Spring輕量級,基本版本大約2MB。
  2. Spring被設計爲侵入式設計,代碼的污染極低,基於Spring的開發不需要依賴Spring API。
  3. Spring兩大核心IOC和AOP。
  4. Spring支持其他優秀的框架(整合這一方面,Spring做的相當到位)。
  5. IOC:創建對象以及管理對象之間的調用關係,避免硬編碼造成程序的耦合
  6. AOP:實現很多特定功能(安全、事務、日誌、權限等)。
  7. Spring本身也提供了展現層(Spring MVC)和持久層(Spring JDBC)。
  8. 待補充。。。

 

  1. Spring模塊

  1. Spring Core(核心容器):生產和管理bean
  2. Spring Context(應用上下文):提供框架式的Bean訪問方式,以及企業級功能(JNDI、定時任務等)
  3. Spring AOP(面向切面編程):減少系統中的重複代碼,降低了模塊間的耦合度,同時提高了系統的可維護性。可用於權限認證、日誌、事務處理
  4. Spring DAO(JDBC和DAO模塊)對jdbc抽象,簡化數據訪問異常處理
  5. Spring ORM(對象關係映射)對現有ORM框架支持
  6. Spring Web(Web)提供了基本的面向Web的綜合特性,(文件上傳等)
  7. Spring Web MVC(MVC模塊)MVC框架是一個全功能的構建Web應用程序的MVC實現

 

 

  1. 核心容器(應用上下文)模塊

這是基本的Spring模塊,提供spring 框架的基礎功能,BeanFactory 是 任何以spring爲基礎的應用的核心。Spring 框架建立在此模塊之上,它使Spring成爲一個容器。

 

  1. BeanFactory

Bean 工廠是工廠模式的一個實現,提供了控制反轉功能,用來把應用的配置和依賴從正真的應用代碼中分離。最常用的BeanFactory 實現是XmlBeanFactory 類

 

  1. XMLBeanFactory

最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory ,它根據XML文件中的定義加載beans。該容器從XML 文件讀取配置元數據並用它去創建一個完全配置的系統或應用。

 

  1. Spring AOP模塊

AOP模塊用於發給我們的Spring應用做面向切面的開發, 很多支持由AOP聯盟提供,這樣就確保了Spring和其他AOP框架的共通性。這個模塊將元數據編程引入Spring。

 

  1. JDBC抽象和DAO模塊

通過使用JDBC抽象和DAO模塊,保證數據庫代碼的簡潔,並能避免數據庫資源錯誤關閉導致的問題,它在各種不同的數據庫的錯誤信息之上,提供了一個統一的異常訪問層。它還利用Spring的AOP 模塊給Spring應用中的對象提供事務管理服務。

 

  1. 解釋對象/關係映射集成模塊

Spring 通過提供ORM模塊,支持我們在直接JDBC之上使用一個對象/關係映射映射(ORM)工具,Spring 支持集成主流的ORM框架,如Hiberate,JDO和 iBATIS SQL Maps。Spring的事務管理同樣支持以上所有ORM框架及JDBC。

 

  1. 解釋WEB模塊

Spring的WEB模塊是構建在application context 模塊基礎之上,提供一個適合web應用的上下文。這個模塊也包括支持多種面向web的任務,如透明地處理多個文件上傳請求和程序級請求參數的綁定到你的業務對象。它也有對Jakarta Struts的支持。

 

  1. Spring配置文件

Spring配置文件是個XML 文件,這個文件包含了類信息,描述瞭如何配置它們,以及如何相互調用。

 

  1. Spring IOC容器

Spring IOC 負責創建對象,管理對象(通過依賴注入(DI),裝配對象,配置對象,並且管理這些對象的整個生命週期。

 

  1. IOC優點
  1. IOC 或 依賴注入把應用的代碼量降到最低。它使應用容易測試,單元測試不再需要單例和JNDI查找機制。最小的代價和最小的侵入性使鬆散耦合得以實現。IOC容器支持加載服務時的餓漢式初始化和懶加載。

 

  1. ApplicationContext通常的實現是什麼?

·FileSystemXmlApplicationContext :此容器從一個XML文件中加載beans的定義,XML Bean 配置文件的全路徑名必須提供給它的構造函數。

·ClassPathXmlApplicationContext:此容器也從一個XML文件中加載beans的定義,這裏,你需要正確設置classpath因爲這個容器將在classpath裏找bean配置。

·WebXmlApplicationContext:此容器加載一個XML文件,此文件定義了一個WEB應用的所有bean。

 

  1. Bean 工廠和 Application contexts  有什麼區別?

Application contexts提供一種方法處理文本消息,一個通常的做法是加載文件資源(比如鏡像),它們可以向註冊爲監聽器的bean發佈事件。另外,在容器或容器內的對象上執行的那些不得不由bean工廠以程序化方式處理的操作,可以在Application contexts中以聲明的方式處理。Application contexts實現了MessageSource接口,該接口的實現以可插拔的方式提供獲取本地化消息的方法。

 

  1. Spring依賴注入
  1. 不需要程序員自己new依賴類
  2. Spring容器幫我們new指定的實例並將實例注入到需要該對象的類中

 

 

  1. 有哪些不同類型的IOC(依賴注入)方式?
  1. Set注入
  2. 構造器注入
  3. 靜態工廠的方法注入
  4. 實例工廠的方法注入

 

  1. 哪種依賴注入方式你建議使用,構造器注入,還是 Setter方法注入?

構造器參數實現強制依賴,setter方法實現可選依賴

 

  1. 什麼是Spring beans

Spring beans是那些形成Spring應用的主幹的java對象。它們被Spring IOC容器初始化,裝配和管理。這些beans通過容器中的配置的元數據創建。比如XML文件中<bean/>的形式定義。Spring定義的beans默認是單例的。

 

  1. 一個 Spring Bean 定義 包含什麼?

一個 Spring Bean 的定義包含容器必知的所有配置元數據,包括如何創建一個 bean,它的生命週期詳情及它的依賴。

 

  1. 如何給Spring 容器提供配置元數據?
  1. XML配置文件
  2. 基於註解的配置
  3. 基於java的配置

 

  1. 你怎樣定義類的作用域?

改變bean的scope屬性值,默認單例

 

  1. 解釋Spring支持的幾種bean的作用域

5種作用域

 

    單例模式(singleton)Bean將只有一個實例,容器負責跟蹤Bean實例的狀態,負責維護Bean實例的生命週期行爲

    原型模式(prototype)一旦創建成功,容器不在跟蹤實例,也不會維護Bean實例的狀態

    Request只有在Web應用中使用Spring時,對於每次HTTP請求,使用request定義的Bean都將產生一個新實例

    Session 只有在Web應用中使用Spring時,對於每次HTTP Session,使用session定義的Bean都將產生一個新實例

    Globalsession 只有在Web應用中使用Spring時,每個全局的HTTP Session,使用session定義的Bean都將產生一個新實例。典型情況下,僅在使用portlet context的時候有效。

 

  1. Spring框架中的單例bean是線程安全的嗎?

Spring框架中的單例bean不是線程安全的

Spring使用ThreadLocal解決線程安全問題

 

 

  1. 解釋Spring框架中bean的生命週期

這是個大問題,得單獨總結一哈!

 

  1.  哪些是重要的bean生命週期方法? 你能重載它們嗎?

有兩個重要的bean 生命週期方法,第一個是setup , 它是在容器加載bean的時候被調用。第二個方法是 teardown  它是在容器卸載類的時候被調用。

The bean 標籤有兩個重要的屬性(init-method和destroy-method)。用它們你可以自己定製初始化和註銷方法。它們也有相應的註解(@PostConstruct和@PreDestroy)。

 

  1. 什麼是Spring的內部bean?

當一個bean僅被用作另一個bean的屬性時,它能被聲明爲一個內部bean,爲了定義inner bean,在Spring 的 基於XML的 配置元數據中,可以在 <property/>或 <constructor-arg/> 元素內使用<bean/> 元素,內部bean通常是匿名的,它們的Scope一般是prototype。

 <property name="" >

            <bean class="">

                <constructor-arg />

            </bean>

        </property>

 

  1. 在 Spring中如何注入一個java集合?

Spring 提供以下幾種集合的配置元素:

<list>類型用於注入一列值,允許有相同的值。

<set> 類型用於注入一組值,不允許有相同的值。

<map> 類型用於注入一組鍵值對,鍵和值都可以爲任意類型。

<props>類型用於注入一組鍵值對,鍵和值都只能爲 String 類型。

 

  1. 什麼是bean裝配?

Spring 容器根據bean的依賴關係通過依賴注入來把他們裝配到一起。

 

  1. 什麼是bean的自動裝配?

Spring 容器能夠自動裝配相互合作的bean,這意味着容器不需要<constructor-arg>和<property>配置,能通過Bean工廠自動處理bean之間的協作。

 

  1. 解釋不同方式的自動裝配

Spring容器有五種自動裝配的方式、

·no:默認的方式是不進行自動裝配,通過顯式設置ref 屬性來進行裝配。

·byName:通過參數名 自動裝配,Spring容器在配置文件中發現bean的autowire屬性被設置成byname,之後容器試圖匹配、裝配和該bean的屬性具有相同名字的bean。

·byType:通過參數類型自動裝配,Spring容器在配置文件中發現bean的autowire屬性被設置成byType,之後容器試圖匹配、裝配和該bean的屬性具有相同類型的bean。如果有多個bean符合條件,則拋出錯誤。

·constructor:這個方式類似於byType, 但是要提供給構造器參數,如果沒有確定的帶參數的構造器參數類型,將會拋出異常。

·autodetect:首先嚐試使用constructor來自動裝配,如果無法工作,則使用byType方式。

 

  1. 自動裝配有哪些侷限性?

·重寫:你仍需用 <constructor-arg>和 <property> 配置來定義依賴,意味着總要重寫自動裝配。

·基本數據類型:你不能自動裝配簡單的屬性,如基本數據類型,String字符串,和類。

模糊特性:自動裝配不如顯式裝配精確,如果有可能,建議使用顯式裝配。

 

  1. 你可以在Spring中注入一個null 和一個空字符串嗎?

可以

<null/>用於處理null值。Spring會把屬性的空參數當作空字符串處理。以下的xml片斷將email屬性設爲空字符串。

 

<bean class="ExampleBean">

  <property name="email"><value/></property>

</bean>

 

這等同於Java代碼: exampleBean.setEmail("")。而null值則可以使用<null>元素可用來表示。例如:

 

<bean class="ExampleBean">

  <property name="email"><null/></property>

</bean>

 

上述的配置等同於Java代碼:exampleBean.setEmail(null)。

 ————————————————

版權聲明:本文爲CSDN博主「xiao_jun_0820」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/xiao_jun_0820/article/details/7232079

 

  1. 什麼是基於Java的Spring註解配置? 給一些註解的例子

基於Java的配置,允許你在少量的Java註解的幫助下,進行你的大部分Spring配置而非通過XML文件。

以@Configuration 註解爲例,它用來標記類可以當做一個bean的定義,被Spring IOC容器使用。另一個例子是@Bean註解,它表示此方法將要返回一個對象,作爲一個bean註冊進Spring應用上下文。

元註解

https://blog.csdn.net/pengjunlee/article/details/79683621#%40Target%E6%B3%A8%E8%A7%A3

 

  1. 什麼是基於註解的容器配置?

相對於 XML 文件,註解型的配置依賴於通過字節碼元數據裝配組件,而非尖括號的聲明。開發者通過在相應的類,

方法或屬性上使用註解的方式,直接組件類中進行配置,而不是使用 xml 表述 bean 的裝配關係

 

  1. 怎樣開啓註解裝配?

Spring 配 置 文 件 中 配置 <context:annotation-config/>

 

  1. @Resource 註解(不是Spring的,由J2EE提供,需要導入包javax.annotation.Resource)

通過一個bean定義的顯式的屬性值或通過自動裝配

@Resource裝配順序

  1. 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常

  2. 如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常

  3. 如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或者找到多個,都會拋出異常

  4. 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退爲一個原始類型進行匹配,如果匹配則自動裝配;

 

  1. @Autowired 註解

按byType自動注入

@Autowired(required=false) ,如果我們想使用名稱裝配可以結合@Qualifier註解進行使用

 

  1. @Qualifier 註解

當有多個相同類型的bean卻只有一個需要自動裝配時,將@Qualifier 註解和@Autowire 註解結合使用以消除這種混淆,指定需要裝配的確切的bean。

 

  1. 在Spring框架中如何更有效地使用JDBC?

使用SpringJDBC 框架,資源管理和錯誤處理的代價都會被減輕。所以開發者只需寫statements 和 queries從數據存取數據,JDBC也可以在Spring框架提供的模板類的幫助下更有效地被使用,這個模板叫JdbcTemplate

 

  1. JdbcTemplate

JdbcTemplate 類提供了很多便利的方法解決諸如把數據庫數據轉變成基本數據類型或對象,執行寫好的或可調用的數據庫操作語句,提供自定義的數據錯誤處理。

 

  1. Spring對DAO的支持

Spring對數據訪問對象(DAO)的支持旨在簡化它和數據訪問技術如JDBC,Hibernate or JDO 結合使用。這使我們可以方便切換持久層。編碼時也不用擔心會捕獲每種技術特有的異常。

 

  1. 使用Spring通過什麼方式訪問Hibernate?

在Spring中有兩種方式訪問Hibernate:

·控制反轉  Hibernate Template和 Callback

·繼承 HibernateDAOSupport提供一個AOP 攔截器

 

  1. Spring支持的ORM

Spring支持以下ORM:

·Hibernate

·iBatis

·JPA (Java Persistence API)

·TopLink

·JDO (Java Data Objects)

·OJB

 

  1. 如何通過HibernateDaoSupport將Spring和Hibernate結合起來?

用Spring的 SessionFactory 調用 LocalSessionFactory。集成過程分三步:

·配置the Hibernate SessionFactory

·繼承HibernateDaoSupport實現一個DAO

·在AOP支持的事務中裝配

 

  1. Spring支持的事務管理類型

Spring支持兩種類型的事務管理:

·編程式事務管理:這意味你通過編程的方式管理事務,給你帶來極大的靈活性,但是難維護。

聲明式事務管理:這意味着你可以將業務代碼和事務管理分離,你只需用註解和XML配置來管理事務。

 

  1. Spring框架的事務管理有哪些優點?

·它爲不同的事務API  如 JTA,JDBC,Hibernate,JPA 和JDO,提供一個不變的編程模式。

·它爲編程式事務管理提供了一套簡單的API而不是一些複雜的事務API如

·它支持聲明式事務管理。

·它和Spring各種數據訪問抽象層很好得集成。

 

  1. 你更傾向用那種事務管理類型?

大多數Spring框架的用戶選擇聲明式事務管理,因爲它對應用代碼的影響最小,因此更符合一個無侵入的輕量級容器的思想。聲明式事務管理要優於編程式事務管理,雖然比編程式事務管理(這種方式允許你通過代碼控制事務)少了一點靈活性。

 

  1. 解釋AOP

面向切面的編程,或AOP, 是一種編程技術,允許程序模塊化橫向切割關注點,或橫切典型的責任劃分,如日誌和事務管理。

 

  1. Aspect 切面

封裝通用業務邏輯的組件,可以作用到其他組件上。由 pointcut 和 advice 組成, 它既包含了橫切邏輯的定義, 也包括了連接點的定義

 

  1. 在Spring AOP 中,關注點和橫切關注的區別是什麼?

關注點是應用中一個模塊的行爲,一個關注點可能會被定義成一個我們想實現的一個功能。

橫切關注點是一個關注點,此關注點是整個應用都會使用的功能,並影響整個應用,比如日誌,安全和數據傳輸,幾乎應用的每個模塊都需要的功能。因此這些都屬於橫切關注點。

 

  1. 連接點

程序運行中的一些時間點, 例如一個方法的執行, 或者是一個異常的處理

 

  1. 切點

 就是提供一組規則(使用 AspectJ pointcut expression language 來描述) 來匹配joinpoint, 給滿足規則的 joinpoint 添加 Advice

 

  1. 什麼是引入?

引入允許我們在已存在的類中增加新的方法和屬性。

 

  1. 什麼是目標對象?

織入 advice 的目標對象.

 

  1. 什麼是代理?

代理是通知目標對象後創建的對象。從客戶端的角度看,代理對象和目標對象是一樣的。

 

  1. 有幾種不同類型的自動代理?

BeanNameAutoProxyCreator

DefaultAdvisorAutoProxyCreator

Metadata autoproxying

 

  1. 什麼是織入。什麼是織入應用的不同點?

織入是將切面和到其他應用類型或對象連接或創建一個被通知對象的過程。

織入可以在編譯時,加載時,或運行時完成。

 

  1. 解釋基於XML Schema方式的切面實現

在這種情況下,切面由常規類以及基於XML的配置實現。

 

  1. 解釋基於註解的切面實現

在這種情況下(基於@AspectJ的實現),涉及到的切面聲明的風格與帶有java5標註的普通java類一致。

 

  1. 什麼是Spring的MVC框架?

Spring 配備構建Web 應用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反轉把業務對象和控制邏輯清晰地隔離。它也允許以聲明的方式把請求參數和業務對象綁定。

 

  1. DispatcherServlet

Spring的MVC框架是圍繞DispatcherServlet來設計的,它用來處理所有的HTTP請求和響應。

 

  1. WebApplicationContext

WebApplicationContext 繼承了ApplicationContext  並增加了一些WEB應用必備的特有功能,它不同於一般的ApplicationContext ,因爲它能處理主題,並找到被關聯的servlet。

 

  1. 什麼是Spring MVC框架的控制器?

控制器提供一個訪問應用程序的行爲,此行爲通常通過服務接口實現。控制器解析用戶輸入並將其轉換爲一個由視圖呈現給用戶的模型。Spring用一個非常抽象的方式實現了一個控制層,允許用戶創建多種用途的控制器。

 

  1. @Controller 註解

該註解表明該類扮演控制器的角色,Spring不需要你繼承任何其他控制器基類或引用Servlet API。

 

  1. @RequestMapping 註解

該註解是用來映射一個URL到一個類或一個特定的方處理法上。

 

 

 

補充

  1. SpringAOP動態代理

    JDK動態代理

JDK動態代理只提供接口的代理,不支持類的代理。核心InvocationHandler接口和Proxy類InvocationHandler 通過invoke()方法反射來調用目標類中的代碼,動態地將橫切邏輯和業務編織在一起;接着,Proxy利用 InvocationHandler動態創建一個符合某一接口的的實例,  生成目標類的代理對象。

    CGLib動態代理

Code Generation Library是一個代碼生成的類庫,可以在運行時動態的生成指定類的一個子對象,並覆蓋其中的特定方法並添加增強代碼,從而實現AOP。CGLIB是通過繼承的方式做的動態代理,因此如果某個類被標記爲final,那麼它是無法使用CGLIB做動態代理的。

 

 

  1. Spring 框架中都用到了哪些設計模式?

1、工廠模式:beanfactory

2、單例模式:Bean默認爲單例模式

3、代理模式:Spring的AOP功能用到了JDK的動態代理和CGLIB字節碼生成技術

4、模板方法:用來解決代碼重複的問題,RestTemplate, JpaTemplate

5、觀察者模式:定義對象鍵一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都會得到通知被制動更新

 

 

  1. Spring事務的實現方式和實現原理

Spring事務的本質其實就是數據庫對事務的支持,沒有數據庫的事務支持,spring是無法提供事務功能的。真正的數據庫層的事務提交和回滾是通過binlog或者redo log實現的。

 

事務的種類

 

①編程式事務管理使用TransactionTemplate

 

②聲明式事務管理,其本質是通過AOP功能,對方法前後進行攔截,將事務處理的功能編織到攔截的方法中,也就是在目標方法開始之前加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務。

 

聲明式事務優點:不需要在業務邏輯代碼中摻雜事務管理的代碼

 

聲明式事務缺點:最細粒度只能作用到方法級別,無法做到像編程式事務那樣可以作用到代碼塊級別

 

  1. Spring的事務傳播行爲

required:必須在事務中運行,如果沒有,就創建新事物。

Supports:支持事務,有沒有事務都可以。

Mandatory:當前沒有事務就會拋出異常

Required_new:新建事務,如果當前存在事務,就把當前事務掛起。

Not_supported:不需要事務,如果存在事務中,當前事務會掛起,方法完成,事務繼續

Never:不能在事範圍內執行,否則拋出

Nested:不管存不存在事務,都會開啓一個事務,當前存在就嵌套,不存在就搞一個新的

 

 

  1. Spring中的隔離級別

    default:默認,使用後端數據庫默認的隔離級別

    Read_uncommitted:允許讀還未提交已變數據,導致髒、幻、不可重複讀

    Read_committed:允許併發事務提交之後讀,防止髒讀,不能防幻、不可重複讀

    Repeatable_read:對相同字段多次讀取數據一致,幻讀可能發生

    Serializable:完全服從ACID的隔離級別,性能是最差的

 

一般選擇第二個提交讀隔離級別,出現幻讀和不可重複讀,可以在特定場合使用悲觀鎖和樂觀鎖解決

 

 

  1. BeanFactory和ApplicationContext有什麼區別?

BeanFactory和ApplicationContext是Spring的兩大核心接口,都可以當做Spring的容器。其中ApplicationContext是BeanFactory的子接口。

 

    BeanFactory:是Spring裏面最底層的接口,包含了各種Bean的定義,讀取bean配置文檔,管理bean的加載、實例化,控制bean的生命週期,維護bean之間的依賴關係。

    ApplicationContext接口作爲BeanFactory的派生,除了提供BeanFactory所具有的功能外,還提供了更完整的框架功能:繼承MessageSource,因此支持國際化;統一的資源文件訪問方式;提供在監聽器中註冊bean的事件;同時加載多個配置文件;載入多個(有繼承關係)上下文 ,使得每一個上下文都專注於一個特定的層次,比如應用的web層。

    BeanFactroy採用的是延遲加載形式來注入Bean的,即只有在使用到某個Bean時(調用getBean()),纔對該Bean進行加載實例化。

    ApplicationContext,它是在容器啓動時,一次性創建了所有的Bean

    相對於基本的BeanFactory,ApplicationContext 唯一的不足是佔用內存空間。當應用程序配置Bean較多時,程序啓動較慢

    BeanFactory通常以編程的方式被創建,ApplicationContext還能以聲明的方式創建,如使用ContextLoader

    BeanFactory需要手動註冊,而ApplicationContext則是自動註冊

 

 

  1. 待補充。。。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章