90.爲何要使用 spring?html
91.解釋一下什麼是 aop?java
92.解釋一下什麼是 ioc?git
93.spring 有哪些主要模塊?github
94.spring 經常使用的注入方式有哪些?spring
95.spring 中的 bean 是線程安全的嗎?編程
96.spring 支持幾種 bean 的做用域?安全
97.spring 自動裝配 bean 有哪些方式?session
98.spring 事務實現方式有哪些?多線程
99.說一下 spring 的事務隔離?架構
100.說一下 spring mvc 運行流程?
101.spring mvc 有哪些組件?
102.@RequestMapping 的做用是什麼?
103.@Autowired 的做用是什麼?
90.爲何要使用 spring?
Spring是一款爲了解決企業應用開發的複雜性而建立的輕量級Java框架。框架的主要優點之一就是其分層架構,分層架構容許使用者選擇哪個組件,同時爲J2EE應用程序開發提供集成的框架。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用均可以從Spring中受益,Spring的核心是控制反轉IOC和麪向切面AOP。
總的來講,就是簡化Java開發。
91.解釋一下什麼是 aop?
AOP(Aspect Oriented Programming),即面向切面編程,能夠說是OOP(Object Oriented Programming,面向對象編程)的補充和完善。OOP引入封裝、繼承、多態等概念來創建一種對象層次結構,用於模擬公共行爲的一個集合。不過OOP容許開發者定義縱向的關係,但並不適合定義橫向的關係,例如日誌功能。日誌代碼每每橫向地散佈在全部對象層次中,而與它對應的對象的核心功能毫無關係對於其餘類型的代碼,如安全性、異常處理和透明的持續性也都是如此,這種散佈在各處的無關的代碼被稱爲橫切(cross cutting),在OOP設計中,它致使了大量代碼的重複,而不利於各個模塊的重用。
AOP技術偏偏相反,它利用一種稱爲"橫切"的技術,剖解開封裝的對象內部,並將那些影響了多個類的公共行爲封裝到一個可重用模塊,並將其命名爲"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任封裝起來,便於減小系統的重複代碼,下降模塊之間的耦合度,並有利於將來的可操做性和可維護性。
在面向切面編程的思想裏面,把功能分爲核心業務功能,和周邊功能。
周邊功能在 Spring 的面向切面編程AOP思想裏,即被定義爲切面
在面向切面編程AOP的思想裏面,核心業務功能和切面功能分別獨立進行開發,而後把切面功能和核心業務功能 "編織" 在一塊兒,這就叫AOP
AOP 當中的概念:
AOP的用法
92.解釋一下什麼是 ioc?
IoC:Inverse of Control(控制反轉),不是什麼技術,而是一種設計思想,就是將本來在程序中手動建立對象的控制權,交由Spring框架來管理。
描述一下控制反轉的概念:控制反轉是一種經過描述(在 Java 中能夠是 XML 或者註解)並經過第三方(Spring)去產生或獲取特定對象的方式。
Spring IoC 容器的生成十分的複雜,可是大致瞭解一下 Spring IoC 初始化的過程仍是必要的。這對於理解 Spring 的一系列行爲是頗有幫助的。注意:Bean 的定義和初始化在 Spring IoC 容器是兩大步驟,它是先定義,而後初始化和依賴注入的。Spring(2)——Spring IoC 詳解
DI:Dependency Injection(依賴注入)
總結:IoC 和 DI 實際上是同一個概念的不一樣角度描述,DI 相對 IoC 而言,明確描述了「被注入對象依賴 IoC 容器配置其依賴對象」
93.spring 有哪些主要模塊?
Spring 的框架結構
94.spring 經常使用的注入方式有哪些?
Spring經過DI(依賴注入)實現IOC(控制反轉),經常使用的注入方式主要有三種:構造方法注入,setter注入,基於註解的注入。
95.spring 中的 bean 是線程安全的嗎?
先看兩個概念:Spring中bean的做用域、有狀態和無狀態bean
Spring 的 bean 做用域(scope)類型
一、singleton:單例,默認做用域。
二、prototype:原型,每次建立一個新對象。
三、request:請求,每次Http請求建立一個新對象,適用於WebApplicationContext環境下。
四、session:會話,同一個會話共享一個實例,不一樣會話使用不用的實例。
五、global-session:全局會話,全部會話共享一個實例。
有狀態的bean:對象中有實例變量(成員變量),能夠保存數據,是非線程安全的。
無狀態的bean:對象中沒有實例變量(成員變量),不能保存數據,能夠在多線程環境下共享,是線程安全的。
線程安全這個問題,要從單例與原型Bean分別進行說明。
原型Bean
對於原型Bean,每次建立一個新對象,也就是線程之間並不存在Bean共享,天然是不會有線程安全的問題。
單例Bean
對於單例Bean,全部線程都共享一個單例實例Bean,所以是存在資源的競爭。
若是單例Bean,是一個無狀態Bean,也就是線程中的操做不會對Bean的成員執行查詢之外的操做,那麼這個單例Bean是線程安全的。好比Spring mvc 的 Controller、Service、Dao等,這些Bean大可能是無狀態的,只關注於方法自己。
對於有狀態的bean,Spring官方提供的bean,通常提供了經過ThreadLocal去解決線程安全的方法,好比RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等。
使用ThreadLocal的好處
使得多線程場景下,多個線程對這個單例Bean的成員變量並不存在資源的競爭,由於ThreadLocal爲每一個線程保存線程私有的數據。這是一種以空間換時間的方式。
固然也能夠經過加鎖的方法來解決線程安全,這種以時間換空間的場景在高併發場景下顯然是不實際的。
spring 線程安全問題 Spring中的Bean是線程安全的嗎?
96.spring 支持幾種 bean 的做用域?
一、singleton:單例,默認做用域。
二、prototype:原型,每次建立一個新對象。
三、request:請求,每次Http請求建立一個新對象,適用於WebApplicationContext環境下。
四、session:會話,同一個會話共享一個實例,不一樣會話使用不用的實例。
五、global-session:全局會話,全部會話共享一個實例。
97.spring 自動裝配 bean 有哪些方式?
SpringBean的裝配,所謂 」裝配「 就是指將Bean安裝到Spring容器中並進行依賴關係配置,稍微提一下IOC控制反轉就是指的安裝這一過程當中,而DI依賴指的是配置這一過程。本章咱們就Spring應用中如何進行裝配Bean進行講解;如自動化裝配,Java配置裝配,XML配置裝配方式進行介紹
Spring的三種裝配機制
值得一提的是,咱們在項目中應該優先實用隱式的Bean發現機制和自動裝配,其次使用在Java中進行裝配,最後再使用在XML中進行裝配。
Spring從兩個角度來實現自動化裝配;組件掃描(Spring自動發現應用中上下文所須要的建立的Bean),自動裝配(Spring自動知足Bean之間的依賴)
@Component public class User { @Autowired private Article article; public void action() { article.action(); } }
所謂自動裝配技術是一種由 Spring 本身發現對應的 Bean,自動完成裝配工做的方式,它會應用到一個十分經常使用的註解 @Autowired
上,這個時候 Spring 會根據類型去尋找定義的 Bean 而後將其注入。
在Spring使用中,咱們在xml配置文件經過元素或元素的ref屬性向bean注入另外的依賴bean。
若是使用自動裝配(autowiring) ,就能夠減小甚至消除配置元素和元素。
設置元素的autowire屬性就能夠設定bean的自動裝配模式。自動裝配有5種模式。
首先假設User類有兩個setter方法,一個是setUsername(),一個是setAccount()。
byName方式
<bean id="ac_100" class="twm.demo.Account"/> <bean id="user" class="twm.demo.User"> <property name="username" value="Yanglan"/> <property name="account" ref="ac_100"/> </bean> <!--如下是使用自動裝配,假設這裏定義的id爲account--> <bean id="account" class="twm.demo.Account"/> <bean id="user" class="twm.demo.User" autowire="byName"> <property name="username" value="Yanglan"/> </bean>
咱們看看上下兩種配置的方式的區別,user bean的屬性account的值是一個定義好的Bean,在屬性中經過ref引用其id(ac_100)實現注入。
第二種方式把該Bean的id改爲了與引用它的Bean屬性相同的名字(id=」account」 可忽略屬性首字每大小寫),而後使用byName的方式來自動裝配,對user bean來講省略配置一個元素。
若是不想在xml文件中使用autowire屬性來啓用自動裝配,還能夠直接在類定義中使用@Autowired或@Resource來裝配bean。
使用@Autowired自動裝配時,容器中只能有一個適合的Bean待選,不然的話,spring會拋出異常。(由於@Autowired默認是使用byType的方式裝配)
最後,總結一下,Spring裝配bean有三種方式。其中一種是隱式bean的發現機制和自動裝配原則,這種方式的自動裝配bean又有兩種實現方式,在xml中自動裝配或是使用註解自動裝配。
98.spring 事務實現方式有哪些?
99.說一下 spring 的事務隔離?
100.說一下 spring mvc 運行流程?
101.spring mvc 有哪些組件?
102.@RequestMapping 的做用是什麼?
103.@Autowired 的做用是什麼?