1. 程式人生 > >Spring學習筆記(一):眼見為實,先上一個簡單例子

Spring學習筆記(一):眼見為實,先上一個簡單例子

概述

所謂眼見為實,Spring雖然是一個輕量級的框架,但涉及眾多的概念,理解起來並不容易,因此,先參考資料寫一個簡單的Demo,從中洞見Spring的大體工作流程,為後面深入學習做鋪墊。

本文的Demo很簡單:模擬圖書資料訪問服務,即向資料庫中新增圖書資訊,涉及IBookDAO介面與BookDAO實現類。

一、環境準備

1. JDK 1.8及以上;

2. Maven 3.5及以上

3. IDE,Eclipse,IntelliJ IDEA 等,本文采用Eclipse

二、建立一個Maven工程

第一步:在pom檔案中新增必要的依賴:既然要使用Spring,自然要新增相關的依賴包,如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.yingshulan.spring</groupId>
  <artifactId>spring-learning</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>spring-learning</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.3.0.RELEASE</spring.version>
  </properties>
   <profiles>
        <profile>
            <id>JDK1.8</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <encoding>UTF-8</encoding>
            </properties>
        </profile>
  </profiles>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <dependency>
       <groupId>org.aspectj</groupId>
       <artifactId>aspectjweaver</artifactId>
       <version>1.8.9</version>
     </dependency>
     <dependency>
       <groupId>cglib</groupId>
       <artifactId>cglib</artifactId>
       <version>3.2.4</version>
     </dependency>
  </dependencies>
</project>

第二步:DAO層原始檔建立:建立IBookDAO介面與BookDAO實現類,僅作為簡單示例,因此只包含一個方法,如下所示:

package com.yingshulan.spring_learning.api;

public interface IBookDAO
{
    /**
     * 新增圖書
     */
    public String addBook(String bookname);
}
package com.yingshulan.spring.spring_learning;

import com.yingshulan.spring_learning.api.IBookDAO;

/**
 * 圖書資料訪問實現類
 */
public class BookDAO implements IBookDAO
{


    public String addBook(String bookname)
    {
        return "新增圖書" + bookname + "成功!";
    }
}

第三步:Service層原始檔建立:建立一個BookService類,如下:

package com.yingshulan.spring.spring_learning;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.yingshulan.spring_learning.api.IBookDAO;

public class BookService
{

    private IBookDAO bookDAO;

    public BookService()
    {
        // 第一步: 使用框架 API ClassPathXmlApplicationContext() 來建立應用程式的上下文。
        // 這個 API 載入 beans 的配置檔案並最終基於所提供的 API,它處理建立並初始化所有的物件,即在配置檔案中提到的 beans。
        ApplicationContext ctx = new ClassPathXmlApplicationContext("IOCBeans01.xml");
        
        // 第二步是使用已建立的上下文的 getBean() 方法來獲得所需的 bean。
        // 這個方法使用 bean 的 ID 返回一個最終可以轉換為實際物件的通用物件。一旦有了物件,你就可以使用這個物件呼叫任何類的方法。
        bookDAO = (IBookDAO) ctx.getBean("bookdao");
    }

    /**
     * Service層: 呼叫DAO層的方法寫資訊到資料庫
     * @param bookname
     */
    public void storeBook(String bookname)
    {
        System.out.println("增加圖書資訊到資料庫");
        String result = bookDAO.addBook(bookname);
        System.out.println(result);
    }
}

第四步:為Bean建立配置檔案:即第三步程式碼中的 “IOCBeans01.xml”,該檔案是一個 XML 檔案,這個檔案需要在 src 目錄(按照規範,一般在src/resource目錄)下建立。通常開發人員儲存該檔案的名稱為 Beans.xml 檔案,當然你也可以設定成任何你喜歡的名稱。但是你必須確保這個檔案在 CLASSPATH 中是可用的,並在主應用程式中使用相同的名稱。

Beans.xml 用於給不同的 bean 分配唯一的 ID(本例中只定義了一個bean,id為 “bookdao”),並且控制物件的建立,而不會影響 Spring 的任何原始檔。例如,使用下面的檔案,事實上定義了一個BookDAO類的bean,由於BookDAO類沒有屬性,構造方法也是預設的,因此,bean的定義沒有涉及屬性,後面我們將介紹更復雜的bean的定義。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="bookdao" class="com.yingshulan.spring.spring_learning.BookDAO"></bean>
</beans>

工作流程:

當 Spring 應用程式被載入到記憶體中時,框架利用了上面的配置檔案來建立所有已經定義的 beans,並且按照標籤的定義為它們分配一個唯一的 ID。你可以使用標籤來傳遞在建立物件時使用不同變數的值。這些beans被建立後存在於Spring容器中,應用程式可以通過ID獲取bean,bean本質上是物件,既然獲取了bean,自然就能夠呼叫bean的方法。

第五步:建立測試類,執行程式:建立一個測試類,呼叫Service層方法進行測試,如下:

package com.yingshulan.spring.spring_learning;


public class AppTest
{
    public static void main(String[] args)
    {
        BookService bookservice = new BookService();
        bookservice.storeBook("《深入淺出理解 Spring 3.X 精要》");
    }
}

執行結果:

增加圖書資訊到資料庫
新增圖書《深入淺出理解 Spring 3.X 精要》成功!