一. Spring 原理講解 java
Spring 是一個輕量容器框架(開源);Spring的核心是 IoC(控制反轉) 和 AOP(面向切面編程); 程序員
Spring 由7個模塊組成:web
√ 什麼是框架?spring
二. Spring IoC (控制反轉) 數據庫
控制反轉(Inversion of Control,英文縮寫爲IoC)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的Spring框架的核心。編程
設計原理:把耦合從代碼中移出去,放在同一的 XML 文件中,經過一個容器在須要的時候把這個依賴關係實現,及把須要的接口實現注入到須要它的類中。服務器
IoC 中最基本的 Java 技術就是"反射"編程,反射編程方式相對於正常的編程方式要慢十幾倍,經過 SUN 改良以後反射方式生成的對象和普通方式生成的對象相差不大了(依然有一倍以上的差距);架構
控制反轉通常分爲兩種類型app
三. Spring AOP (面向切面變成) 框架
AOP 是 Aspect Oriented Programming的縮寫;AOP同OOP都是一種編程思想,且AOP 其實是OOP的一種延續,咱們用類比法進行理解:
AOP 同 OOP 的關聯:1. 都是編程思想;
AOP 同 OOP 的區別:1. OOP關注的是縱向業務,而AOP關注的是橫向業務;
2. 從業務角度來講,OOP 是對實體業務屬性和行爲進行抽象封裝,AOP面對的是在處理過程當中的某個步驟或階段;
說明:
上圖中將國內商務部、國際商務部和廣告製做部歸併(抽象)到商務部,以及將開發部、測試部、設計部歸併(抽象)到技術部是用到了OOP 的編程思想;
國際商務部、國內商務部和開發部都有訪問客戶的業務,廣告製做部和設計部,此時用抽象沒法形象體現出來(同一類中的其餘部門沒有對應的業務),這裏就可使用AOP 編程思想;
四. Spring 模塊說明
Spring 框架是一個分層架構,由7個定義良好的模塊組成。Spring 模塊構建在覈心容器之上,核心容器定義了建立、配置和管理 Bean 的方式;組成 Spring 框架的每一個模塊(或組件)均可以單獨存在,或者與其餘一個或多個模塊聯合實現。
Bean的概念:由 IoC 容器管理的那些組成你應用程序的對象;Bean 是 Spring 管理的基本單位,在基於Spring 的 Java EE 應用中,全部的組件都被當成Bean 處理(包括數據源、Hibernate的SessionFactory、事物管理器等)。Bean 就是由 Spring 容器初始化、裝配及管理的對象,除此以外,bean 就與應用程序中其餘對象沒有什麼區別了。
1. Spring Core (核心容器):
概念理解:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要組件是BeanFactory,它是工廠模式的實現。BeanFactory 使用 IoC 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
實際應用:Spring 有兩個核心接口(BeanFactory 和 ApplicationContext),其中ApplicationContext 是BeanFactory 的子接口。他們均可表明 Spring 容器,Spring 容器是生成 Bean 實例的工廠,而且管理容器中的 Bean。
1 public interface HelloService { 2 public void sayHello(); 3 }
1 public class HelloServiceImpl implements HelloService{ 2 public void sayHello(){ 3 System.out.println("Hello World!"); 4 } 5 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation=" 6 http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 10 11 <!-- id 表示組件的名字,class表示組件類 --> 12 <bean id="helloService" class="com.ljq.test.HelloServiceImpl" /> 13 14 </beans>
1 public class HelloServiceTest { 2 @Test 3 public void testHelloWorld() { 4 // 一、讀取配置文件實例化一個IOC容器 5 ApplicationContext context = new ClassPathXmlApplicationContext("helloworld.xml"); 6 // 二、從容器中獲取Bean,注意此處徹底「面向接口編程,而不是面向實現」 7 HelloService helloService = context.getBean("helloService", HelloService.class); 8 // 三、執行業務邏輯 9 helloService.sayHello(); 10 } 11 }
說明:上訴 1-4 即爲一個Spring Bean 的實際應用;其實就是以下4個步驟
ApplicationContext常常用到的三個實現:
2. Spring Context (Spring 上下文):
Spring 上下文是一個配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業服務,例如JNDI、EJB、電子郵件、國際化、校驗和調度功能。
在spring使用過程當中,一般的作法是讓服務器啓動時即實例化全部的bean,這樣作在必定程度上提升了web應用的速度。
要配置在服務器啓動加載applicationcontext一般有兩種方法:
1 <listener> 2 <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> 3 </listener>
1 <servlet> 2 <servlet-name>context</servlet-name> 3 <servlet-class> 4 org.springframework.web.context.ContextLoaderServlet 5 </servlet-class> 6 <load-on-startup>1</load-on-startup> 7 </servlet>
不管經過上面的哪種配置均可以達到服務器啓動即實例化bean的目的,若是要想指定applicationContext.xml的位置能夠在增長:
1 <context-param> 2 <param-name>contextConfigLocation</param-name> 3 <param-value>/WEB-INF/appContext.xml</param-value> 4 </context-param>
經過以上配置就能夠達到在服務器啓動時實例化指定的applicationContext.xml配置文件了。
3. Spring AOP
經過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中
4. Spring DAO
JDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,而且極大地下降了須要編寫的異常代碼數量(例如打開和關閉鏈接)。Spring DAO 的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。
說明:針對1-7的詳細應用在接下來的章節中結合實例進行講解