1. 程式人生 > >Spring:(一)入門基礎學習

Spring:(一)入門基礎學習

lns 基本實現 完成 dao層 知識 程序 .html 管理 1.0

前述

  因為前幾日剛剛學完Spring的基礎,因此寫一篇博客整理一下相關的基礎知識。

什麽是Spring?

  Spring 是一個輕量級的 DI / IoC 和 AOP 容器的開源框架,幫助分離項目組件之間的依賴關系。,來源於 Rod Johnson 在其著作《Expert one on one J2EE design and development》中闡述的部分理念和原型衍生而來。

  Spring:SE/EE開發的一站式框架。

    一站式框架:有EE開發的每一層解決方案。

      WEB層 :SpringMVC

      Service層 :Spring的Bean管理,Spring聲明式事務

      DAO層 :Spring的Jdbc模板,Spring的ORM模塊

Spring框架的優點

  • 非侵入式設計:

  非侵入式指應用程序代碼對框架的依賴最小化,即不需要用戶代碼引入框架代碼的信息,從類的編寫者角度來看,察覺不到框架的存在。

  • 方便解耦、簡化開發:

  通過Spring提供的IoC容器,我們可以將對象之間的依賴關系交由Spring進行控制,避免硬編碼所造成的過度程序耦合。有了Spring,用戶不必再為單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專註於上層的應用。

  • 支持AOP編程:

  AOP(Aspect Oriented Programming)面向切面編程。Spring提供了對AOP的支持,它允許將一些通用任務,如安全、事務、日誌等進行集中式處理,從而提高了程序的復用性。

  • 支持聲明式事務處理:

  只需要通過配置就可以完成對事務的管理,不需要手動編程。

  • 方便程序的測試:

  Spring對Junit4支持,可以通過註解方便的測試Spring程序。

  • 方便集成各種優秀框架:

  Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts、Hibernate、Hessian、Quartz)等的直接支持。

  • 降低Java EE API的使用難度:

  Spring對很多難用的Java EE API(如JDBC、JavaMail、遠程調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。

Spring的框架結構

技術分享圖片

  • Data Access/Integration層(數據訪問/集成)包含有JDBC、ORM、OXM、JMS和Transaction模塊。
  • Web層包含了Web、Web-Servlet、WebSocket、Web-Porlet模塊。
  • AOP模塊提供了一個符合AOP聯盟標準的面向切面編程的實現。
  • Core Container(核心容器):包含有Beans、Core、Context和SpEL模塊。
  • Test模塊支持使用JUnit和TestNG對Spring組件進行測試。

  

Spring的框架包

  官方下載地址:https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring

  選擇相應的版本下載就可以了,註意:jdk1.7只能和spring4.0以下的包搭配使用,而你要是用Spring4.0以上的包就要用jdk1.8.0乃至以上的版本。

說明

技術分享圖片

  下面對照結構圖說一下每個jar包的作用

  spring4中的jar包一共有20個

  Core部分包含4個模塊

  1. spring-core:依賴註入IoC與DI的最基本實現
  2. spring-beans:Bean工廠與bean的裝配
  3. spring-context:spring的context上下文即IoC容器
  4. spring-expression:spring表達式語言

 

  AOP部分包含4個模塊

  1. spring-aop:面向切面編程
  2. spring-aspects:集成AspectJ
  3. spring-instrument:提供一些類級的工具支持和ClassLoader級的實現,用於服務器
  4. spring-instrument-tomcat:針對tomcat的instrument實現

  

  Data Access/Integration部分包含5個模塊

  1. spring-jdbc:jdbc的支持
  2. spring-tx:事務控制
  3. spring-orm:對象關系映射,集成orm框架
  4. spring-oxm:對象xml映射
  5. spring-jms:java消息服務

  Web部分包含3個模塊

  1. spring-web:基礎web功能,如文件上傳
  2. spring-webmvc:mvc實現
  3. spring-webmvc-portlet:基於portlet的mvc實現
  4. spring-websocket:為web應用提供的高效通信工具

  

  Test部分一個模塊

  1. spring-test:spring測試,提供junit與mock測試功能

  

  剩下的包是

  1. spring-messaging:用於構建基於消息的應用程序
  2. spring-context-support:spring額外支持包,比如郵件服務、視圖解析等

  除了Spring的包之外,在開發中還會用到一個依賴包,即技術分享圖片

  下載地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi

我的第一個 Spring 程序

  • 創建Web項目,引入核心jar包

技術分享圖片

  • 創建pojo,描述一個User,有name和id
 1 package spring_test1.pojo;
 2 
 3 /**
 4  * @author jyroy
 5  *
 6  */
 7 public class User {
 8     private String name;
 9     private int id;
10     
11     public String getName() {
12         return name;
13     }
14     public void setName(String name) {
15         this.name = name;
16     }
17     public int getId() {
18         return id;
19     }
20     public void setId(int id) {
21         this.id = id;
22     }
23     @Override
24     public String toString() {
25         return "User [name=" + name + ", id=" + id + "]";
26     }
27 }

  • 編寫配置文件

  編寫配置文件要做的就是將類交給Spring管理

  在src目錄下新建Spring核心的配置文件applicationContext.xml

  這個配置文件要怎麽寫呢?

  首先要寫的,就是XML配置文件的約束,那約束怎麽寫呢?只要去 spring-framework-4.3.20.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html 目錄下找到相關的約束復制到xml中就可以了,剩下要做的就是對於類的配置了。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="
 6             http://www.springframework.org/schema/beans
 7              http://www.springframework.org/schema/beans/spring-beans.xsd">
 8         
 9         <!--Spring的入門的配置-->
10         <bean name="user"  class="spring_test1.pojo.User">
11             <property name="name" value="李東"/>
12             <property name="id" value="1007" />
13         </bean> 
14         
15 </beans>

  • 創建一個測試類

 用到了ApplicationContext,它是一種常用的Spring核心容器。提供了完整的IOC服務支持,是管理Bean的工廠,主要負責初始化各種Bean,並調用Bran生命周期的方法,還包含對國際化、資源訪問、事件傳播等方面的支持。

 創建ApplicationContext接口實例,通常有兩種方式:

  1. 通過 ClassPathXmlApplicationContext 創建,就是下面例子中用到的方式,new ClassPathXmlApplicationContext("applicationContext.xml") 是Spring會去類路徑中查找名為applicationContext.xml 的配置文件。
  2. 通過FileSystemXmlApplicationContext 創建,從指定的文件系統路徑(絕對路徑)中尋找指定的XMl配置文件。

 

 1 package spring_test1.test;
 2 
 3 import org.junit.Test;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 
 7 import spring_test1.pojo.User;
 8 
 9 public class UserTest {
10     
11     @Test
12     public void demo1() {
13         //創建Spring的工廠
14         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
15         //通過容器獲取user對象
16         User user = (User) applicationContext.getBean("user");
17         System.out.println(user);
18     }
19 }

  • 結果

技術分享圖片

IOC和DI簡述

  IOC (Inversion Of Control):控制反轉。這是一種設計思想,就是將原本在程序中手動創建對象的控制權,交由Spring框架來管理。

  DI (Dependency Injection): 依賴註入。將對象依賴屬性(簡單值,集合,對象)通過配置設值給該對象。

  說明:

  上面的例子中,便應用了IOC和DI,這裏詳細的說一下。

  可以看到,我們並沒有進行 new 實例化,但是還是產生對象了,這就是利用了IOC容器,進行創建對象,其中 User user = (User) applicationContext.getBean("user"); 便是通過Spring容器獲取的實現類對象,而不是通過 new 關鍵字來創建user。

  其中name和id的設置便是應用了依賴註入,通過set方法進行的基本數據類型的註入。

  

傳統方式與IOC方式對比

傳統方式

  通過new關鍵字來實例化,創建對象。

  Category c = new Category();

IOC方式

  對象的生命周期由Spring來管理,而不需要通過顯式的new來實現。即控制權從本來在自己手裏,現在交給了Spring。

  Category c = Spring產生。


  

  這篇都是Spring介紹和一點點基礎。關於細節的地方沒有展開。我慢慢來。

Spring:(一)入門基礎學習