Spring是什麼前端
Spring是一個一站式輕量級的開源框架
Spring Bean的三種配置方式:xml、註解和Javaweb
@Configuration public class BeanConfig { @Bean public BeanFactory beanFactory(){ return new BeanFactoryImpl(); } }
Spring的核心:spring
控制反轉(IoC)和麪向切面(AOP)
AOP代理主要分爲靜態代理和動態代理數據庫
AOP實現的關鍵在於 代理模式,AOP代理主要分爲靜態代理和動態代理。靜態代理的表明爲AspectJ; 動態代理則以Spring AOP爲表明。 (1)AspectJ是靜態代理的加強,所謂靜態代理,就是AOP框架會在編譯階段生成AOP代理類 所以也稱爲編譯時加強,他會在編譯階段將AspectJ(切面)織入到Java字節碼中 運行的時候就是加強以後的AOP對象。 (2)Spring AOP使用的動態代理,所謂的動態代理就是說AOP框架不會去修改字節碼 而是每次運行時在內存中臨時爲方法生成一個AOP對象 這個AOP對象包含了目標對象的所有方法 而且在特定的切點作了加強處理,並回調原對象的方法。
Spring中AOP動態代理的兩種實現方式:編程
JDK動態代理和CGLIB動態代理
Spring的優勢:後端
Spring將對象之間的依賴關係交由框架處理,減低組件的耦合性; Spring對於主流的應用框架提供了很是方便的集成支持; Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付; Spring框架設計精妙,Spring源碼是經典的學習範例
Spring的七大組成模塊:安全
Spring Core:核心類庫,提供IOC服務; Spring Context:提供框架式的Bean訪問方式,以及企業級功能(JNDI、定時任務等); Spring AOP:AOP服務; Spring DAO:對JDBC的抽象,簡化了數據訪問異常的處理; Spring ORM:對現有的ORM框架的支持; Spring Web:提供了基本的面向Web的綜合特性,例如多方文件上傳; Spring MVC:提供面向Web應用的Model-View-Controller實現
Spring事務的實現方式和實現原理:session
Spring事務的本質其實就是數據庫對事務的支持 沒有數據庫的事務支持,spring是沒法提供事務功能的。 真正的數據庫層的事務提交和回滾是經過binlog或者redo log實現的。
Spring的IOC有三種注入方式 :app
構造器注入、setter方法注入、註解注入
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情形下有效。
缺省的Spring bean 的做用域是Singleton.
Spring支持兩種類型的事務管理:
編程式事務管理:這意味你經過編程的方式管理事務,給你帶來極大的靈活性,可是難維護。 聲明式事務管理:這意味着你能夠將業務代碼和事務管理分離,你只需用註解和XML配置來管理事務。
大多數Spring框架的用戶選擇聲明式事務管理,由於它對應用代碼的影響最小,所以更符合一個無侵入的輕量級容器的思想。聲明式事務管理要優於編程式事務管理,雖然比編程式事務管理(這種方式容許你經過代碼控制事務)少了一點靈活性。
SpringMVC 請求處理流程
一、 用戶發送請求被前端控制器DispatcherServlet捕獲 二、 DispatcherServlet收到請求調用處理器映射器HandlerMapping。 三、 處理器映射器找到具體的處理器(能夠根據xml配置、註解進行查找),生成映射信息 返回給DispatcherServlet。 四、 DispatcherServlet調用處理器適配器HandlerAdapter。 五、 處理器適配器根據映射信息適配調用具體的處理器(Controller,也叫後端控制器) Controller執行完成返回ModelAndView給DispatcherServlet。 六、 DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器 ViewReslover解析後返回具體視圖view。 七、 DispatcherServlet根據視圖View進行渲染視圖而且響應給用戶。
整個過程都是以DispatcherServlet爲中心進行的。
你怎樣定義類的做用域?
當定義一個<bean> 在Spring裏,咱們還能給這個bean聲明一個做用域。它能夠經過bean 定義中的scope屬性來定義。如,當Spring要在須要的時候每次生產一個新的bean實例,bean的scope屬性被指定爲prototype。 另外一方面,一個bean每次使用的時候必須返回同一個實例,這個bean的scope 屬性 必須設爲 singleton。
解釋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情形下有效。
缺省的Spring bean 的做用域是Singleton.
Spring框架中的單例bean是線程安全的嗎?
不,Spring框架中的單例bean不是線程安全的。
解釋Spring框架中bean的生命週期
PS:能夠借鑑Servlet的生命週期,實例化、初始init、接收請求service、銷燬destroy。 Spring的核心容器會首先從XML 文件中讀取bean的定義,並實例化bean。 而後根據bean的定義填充全部的屬性。 而後根據bean內部實現了哪些接口依次調用一堆方法,最後初始化,最後的最後destroy。 若是bean實現了BeanNameAware 接口,Spring 傳遞bean 的ID 到 setBeanName方法。 若是Bean 實現了 BeanFactoryAware 接口, Spring傳遞beanfactory 給setBeanFactory 方法。 若是有任何與bean相關聯的BeanPostProcessors,Spring會在postProcesserBeforeInitialization()方法內調用它們。 若是bean實現IntializingBean了,調用它的afterPropertySet方法, 若是bean聲明瞭初始化方法,調用此初始化方法。 若是有BeanPostProcessors 和bean 關聯,這些bean的postProcessAfterInitialization() 方法將被調用。 若是bean實現了 DisposableBean,它將調用destroy()方法。
哪些是重要的bean生命週期方法? 你能重載它們嗎?
有兩個重要的bean 生命週期方法,第一個是setup , 它是在容器加載bean的時候被調用。第二個方法是 teardown 它是在容器卸載類的時候被調用。 The bean 標籤有兩個重要的屬性(init-method和destroy-method)。 用它們你能夠本身定製初始化和註銷方法。它們也有相應的註解(@PostConstruct和@PreDestroy)