Java程序員之Spring(一) 入門

一. Spring 原理講解 java

  Spring 是一個輕量容器框架(開源);Spring的核心是 IoC(控制反轉) 和 AOP(面向切面編程); 程序員

  Spring 由7個模塊組成:web

  • Spring Core(核心容器):核心容器提供 Spring 框架的基本功能;
  • Spring Context(Spring 上下文):Spring 上下文是一個配置文件,向 Spring框架提供上下文信息;
  • Spring AOP:經過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中;
  • Spring DAO:JDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息;
  • Spring ORM:Spring 框架插入了若干個ORM框架,從而提供了 ORM 的對象關係工具,其中包括JDO、Hibernate和iBatisSQL Map;
  • Spring Web:Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文;
  • Spring MVC框架:MVC框架是一個全功能的構建 Web應用程序的 MVC 實現;  

  √ 什麼是框架?spring

  • 解釋一:制定一套規範或者規則(思想),你們(程序員)在該規範或者規則(思想)下工做;
  • 解釋二:一些牛人前輩或對牛人前輩的總結而出的一套解決方案;  

 

二. Spring IoC (控制反轉) 數據庫

  控制反轉(Inversion of Control,英文縮寫爲IoC)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的Spring框架的核心。編程

  設計原理:把耦合從代碼中移出去,放在同一的 XML 文件中,經過一個容器在須要的時候把這個依賴關係實現,及把須要的接口實現注入到須要它的類中。服務器

  IoC 中最基本的 Java 技術就是"反射"編程,反射編程方式相對於正常的編程方式要慢十幾倍,經過 SUN 改良以後反射方式生成的對象和普通方式生成的對象相差不大了(依然有一倍以上的差距);架構

 

  控制反轉通常分爲兩種類型app

  • 依賴注入(Dependency Injection,簡稱DI): 組件不作定位查詢,只提供普通的Java方法讓容器去決定依賴關係。容器全權負責的組件的裝配,它會把符合依賴關係的對象經過JavaBean屬性或者構造函數傳遞給須要的對象。經過JavaBean屬性注射依賴關係的作法稱爲設值方法注入(Setter Injection);將依賴關係做爲構造函數參數傳入的作法稱爲構造器注入(Constructor Injection);
  • 依賴查找(Dependency Lookup): 容器提供回調接口和上下文條件給組件。EJB和Apache Avalon 都使用這種方式。這樣一來,組件就必須使用容器提供的API來查找資源和協做對象,僅有的控制反轉只體如今那些回調方法上(也就是上面所說的 類型1):容器將調用這些回調方法,從而讓應用代碼得到相關資源.

   

三. 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.  定義接口
1 public interface HelloService {
2     public void sayHello();  
3
  • 2.  定義接口實現類
1 public class HelloServiceImpl implements HelloService{
2     public void sayHello(){
3         System.out.println("Hello World!");
4     }
5 }
  • 3.  在配置文件(helloworld.xml)中註冊Bean信息
 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>
  • 4. 應用
 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個步驟

  • 定義服務層代碼
  • 在配置文件中進行聲明
  • 讀取配置文件實例化一個 IOC 容器(這裏有複雜的源碼,另做分析)
  • 從容器中獲取Bean
  • 執行業務邏輯

  

  ApplicationContext常常用到的三個實現:

  • 1.ClassPathXmlApplicationContext:從類路徑中的XML文件載入上下文定義信息。把上下文定義文件當成類路徑資源。
  • 2.FileSystemXmlApplicationContext:從文件系統中的XML文件載入上下文定義信息。
  • 3.XmlWebApplicationContext:從Web系統中的XML文件載入上下文定義信息。

 

2. Spring Context (Spring 上下文):

   Spring 上下文是一個配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業服務,例如JNDI、EJB、電子郵件、國際化、校驗和調度功能。

 

  在spring使用過程當中,一般的作法是讓服務器啓動時即實例化全部的bean,這樣作在必定程度上提升了web應用的速度。
  要配置在服務器啓動加載applicationcontext一般有兩種方法:

  • ContextLoaderListener 具體配置是在web.xml中增長:
1 <listener> 
2   <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
3 </listener>
  • ContextLoaderServlet 具體配置是在web.xml中增長:
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 異常層次結構。

 
 5. Spring ORM
  Spring 框架插入了若干個ORM框架,從而提供了 ORM 的對象關係工具,其中包括JDO、Hibernate和iBatisSQL Map。全部這些都聽從 Spring 的通用事務和 DAO 異常層次結構。
 
  6. Spring Web 模塊
  Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。因此,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。
 
 7. Spring MVC 框架
  MVC框架是一個全功能的構建 Web應用程序的 MVC 實現。經過策略接口,MVC框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。模型由javabean構成,存放於Map;視圖是一個接口,負責顯示模型;控制器表示邏輯代碼,是Controller的實現。Spring框架的功能能夠用在任何J2EE服務器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象能夠在不一樣J2EE 環境(Web 或EJB)、獨立應用程序、測試環境之間重用。
 

 說明:針對1-7的詳細應用在接下來的章節中結合實例進行講解

相關文章
相關標籤/搜索