1. 程式人生 > >經典三層框架初識(二)---Spring 2.1入門案例1

經典三層框架初識(二)---Spring 2.1入門案例1

前面我們簡單介紹了一個spring.我們這裡主要用spring framew這個框架.主要處理業務邏輯層.我們發現理論恨多,但是其實開發起來程式碼是很簡單的.我們來說一個入門案例.

這裡說的入門案例,主要想說下ioc:  控制反轉,將物件建立和依賴管理的許可權反轉給spring容器.這不是第一次強調這個東西了.我們這裡再重複一下,就當是強調了.不要嫌我囉嗦.這個思想很重要.

以前我們建立物件都是我們手動人工的new出來,這裡呢我們就不需要new了,交給容器,不由我們建立了.物件的生命週期也由容器管理了.我們使用spring後,由於ioc,我們已經將物件的建立和管理的許可權交出去了,如果我們需要物件,通過依賴來實現注入,從容器中獲取

如果A裡面要依賴B,如何實現的呢?這裡有下面的一個DI:依賴注入,對依賴的管理  我們在執行過程中,動態實現給它的依賴,實現值的注入

下面介紹一下這個案例的步驟:

  • 建立java專案
    • 匯入響應jar包  spring是模組化的,所以只需要匯入我們需要的jar包即可,沒必要全部匯入
      • ioc就是由前面說的第一組來實現的,所以需要核心容器的jar + Commons-logging (日誌增強的) 4+1
      • 日誌增強的jar包一個是可以去Apache獲取,另外一個我們以前mybatis的lib中有
    • 這裡我們主要以與資料持久層互動的案例來舉例子,但是我們著重要說的是如何用spring框架建立物件和管理
    • UserDao        資料持久層
      • UserDaoImpl
  • ①.我們先寫一下傳統的,也就是咱們之前的 .下面看一下程式碼
    • 首先我們在src下建立一個dao的包,建立一個UserDao的介面.像我們之前一樣.但是這裡我們就是模擬一下,不連線資料庫了
      package dao;
      
      public interface UserDao {
      	
      	void addUser();
      	void deleteUser();
      }
      

      然後我們在dao包下,建立一個impl的子包,裡面是UserDao介面的實現類UserDaoImpl

    • package dao.impl;
      
      import dao.UserDao;
      
      public class UserDaoImpl implements UserDao {
      
      	@Override
      	public void addUser() {
      		System.out.println("新增使用者");
      	}
      
      	@Override
      	public void deleteUser() {
      		System.out.println("刪除使用者");
      	}
      
      }
      

      這和我們之前一樣.我們先來寫個測試類.src下建立一個test包,裡面建立測試類Test

    • package test;
      
      import dao.UserDao;
      import dao.impl.UserDaoImpl;
      
      public class Test {
      
      	public static void main(String[] args) {
          
                  UserDao dao  =  new UserDaoImpl();
      	    dao.addUser();
      	    dao.deleteUser();
              }
          /*
           *輸出結果:
           *新增使用者
           *新增使用者
           */
      
      }
      
      

      這就是我們之前傳統的建立dao和資料互動的模擬.這裡我們建立和管理物件的許可權都在我們開發者手上,剛才我麼說了spring是一個容器,它的ioc是讓我們將物件的建立和管理都交給容器那就意味著我們這裡建立dao物件,不應該直接new了.應該轉變成從spring容器中獲取.既然要獲取,那spring容器中應該先建立和管理dao物件..如何建立的呢..就是通過配置檔案.

    • 下面我們來配置一下這個配置檔案,在src目錄下,我們建立一個applicationContext.xml的配置檔案.如下配置

      <?xml version="1.0" encoding="UTF-8"?>
      <!-- 這個檔案的名字不是一定要叫這個,而是習慣性都叫這個而已 ,在這裡面我們來配置一下這個spring容器
      	 那如何配置呢?我們還是要參考一下開發指南.
      	 xsd是什麼呢?以前我們說過約束檔案一種是dtd,還有一種是schema.這個約束它的字尾名字就是xsd
      	 發開指南The equivalent file in the XML Schema-style would be…這局下面的約束我們copy到下面
      	 用下面這些約束來約束beans這個標籤裡面的標籤有什麼和如何寫
      -->
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="
              http://www.springframework.org/schema/beans 
              http://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <!-- 一個bean標籤代表配置管理一個物件,這裡我們要用bean來建立和管理UserDao的物件 
          	id:這個物件的唯一標識
          	class:類的完全限定名稱
          -->
      	<bean id="userdao" class="dao.impl.UserDaoImpl"></bean>
      	
      	
      </beans>
      

      此時我們回到測試類:用spring工廠模式建立物件.

    • package test;
      
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      import dao.UserDao;
      
      public class Test {
      
      	public static void main(String[] args) {
      		/*
      		 * 剛才我們已經在配置檔案中配置了讓spring容器幫我們建立物件,我們這裡要拿到這個物件
      		 */
      		//這個spring ioc容器實際上就是ApplicationContext,載入上線問來獲取這個容器物件
      		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
      		//從容器中取物件,那容器中有很多物件的話,通過什麼來取呢?就是我們前面<bean>標籤裡面的id
      		//ApplicationContext 的getBean(String name,Class<T> requiredType)
      		//name就是<bean>中的id;requiredType 是返回物件的型別
      		UserDao dao = ac.getBean("userdao", UserDao.class);
      		dao.addUser();
      		dao.deleteUser();
      	}
      
      }
      

      輸出結果:

    • 十月 26, 2018 9:14:47 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
      資訊: Refreshing org[email protected]7e6cbb7a: startup date [Fri Oct 26 21:14:47 CST 2018]; root of context hierarchy
      十月 26, 2018 9:14:47 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
      資訊: Loading XML bean definitions from class path resource [applicationContext.xml]
      新增使用者
      刪除使用者

       這樣我們就實現了用spring工廠模式建立我們需要物件.我們發現,我們沒有再手動new我們需要的物件了,而是用方法呼叫的模式來實現的.這樣耦合就變低了.