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 精要》成功!