天天看點

【SSH架構】之Spring系列(一)

微信公衆号:compassblog

歡迎關注、轉發,互相學習,共同進步!

有任何問題,請背景留言聯系!

1、前言

前面更新過幾篇關于 Struts2 架構和 Hibernate 架構的文章,但鑒于這兩種架構在今天的主流開發中已經很少用了,是以關于這兩種架構的更新權當興趣,有時間也還會更新的。現在主流開發中代替這兩個架構的是 SpringMVC 和 MyBatis 等等,接下來主要精力集中于 Spring、SpringMVC、Spring Boot 等等,特别是 Spring Boot 架構,當然肯定也會有其他方面的内容,知無不寫,寫無不盡。

2、Spring 架構概述

(1)、Spring 架構在三層架構中的位置

Spring 架構在三層架構中的位置在【【SSH架構】之Hibernate系列(一)】這篇文章中已經提到過,主要描述與下圖:

【SSH架構】之Spring系列(一)

(2)、Spring 是什麼

Spring 是一個輕量級的 Java 開源架構,興起于2003年,它分層架構的特點為 J2EE 應用程式開發提供內建的架構。Spring 的核心是控制反轉(IOC)和面向切面(AOP),是一個一站式的架構。

(3)、Spring 架構的優勢與功能(一站式)

  • Spring 相當于一個容器,可以将所有對象建立和依賴關系維護,交給 Spring 管理 

    AOP 程式設計的支援,容器中裝什麼對象就有什麼功能。

  • Spring 提供面向切面程式設計,可以友善的實作對程式進行權限攔截、運作監控等功能聲明式事務的支援隻需要通過配置就可以完成對事務的管理,而無需手動程式設計,使得程式的測試更為友善。
  • Spring 不僅不排斥各種優秀的開源架構,如:Struts、Hibernate、MyBatis等,還能幫其他架構管理對象,降低 JavaEE API 的使用難度。
  • Spring 對 JavaEE 中的 API 如 JDBC、JavaMail等提供了封裝,使這些 API 應用難度大大降低。
  • Spring 支援 JUnit 測試支援,可以通過注解友善的測試 Spring 程式友善內建各種優秀架構。

3、搭建 Spring 開發環境并完成第一個測試執行個體

(1)、建立一個 web 項目,導入 Spring 所需要的基本包,如下圖所示:

【SSH架構】之Spring系列(一)

(2)、建立一個 Bean 對象,代碼如下:

package com.spring.bean;

public class Student {
    //基本屬性
    private String name; //姓名
    private int age;    //年齡
    private String grade;   //年級
    private String course;  //科目
    private int rank;   //排名

    //setter和getter方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getGrade() {
        return grade;
    }
    public void setGrade(String grade) {
        this.grade = grade;
    }
    public String getCourse() {
        return course;
    }
    public void setCourse(String course) {
        this.course = course;
    }
    public int getRank() {
        return rank;
    }
    public void setRank(int rank) {
        this.rank = rank;
    }

}
           

(3)、在 src 下建立配置檔案 applicationContext.xml,将注冊對象寫入容器,代碼如下:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">

    <!-- 将User對象交給spring容器管理 -->
    <bean  name="stu" class="com.spring.bean.Student" ></bean>

</beans>
           

(4)、書寫測試類 TestDemo.java,代碼如下:

package com.spring.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.bean.Student;

public class TestDemo {

    @Test
    public void test(){
        // 建立容器對象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 向容器擷取user對象
        Student student = (Student) ac.getBean("stu");

        //3列印stu對象
        System.out.println(student);
    }
}
           

(5)、使用 JUnit4 進行測試,結果如下圖:

【SSH架構】之Spring系列(一)
【SSH架構】之Spring系列(一)

本項目運作環境:jdk1.7

4、Spring 配置詳解

<!-- Bean元素:使用該元素描述需要spring容器管理的對象
            class屬性:被管理對象的完整類名.
            name屬性:給被管理的對象起個名字.獲得對象時根據該名稱獲得對象.  
                    可以重複.可以使用特殊字元.
            id屬性: 與name屬性一模一樣. 
                    名稱不可重複.不能使用特殊字元.
            結論: 盡量使用name屬性.
-->
<bean  name="stu" class="com.spring.bean.Student" ></bean>
<!-- 
可以通過import屬性導入其他spring配置檔案
<import resource="路徑/*.xml"/>
-->
           

5、Spring 架構的思想

(1)、IOC:Inverse Of Control,即控制反轉,将對象建立的方式交給了 Spring 容器;

(2)、DI:Dependency Injection,即依賴注入,IOC 的實作需要 DI 支援。

6、Spring 屬性注入

(1)、set方法注入:

<bean  name="stu" class="com.spring.bean.Student" >
        <!--值類型注入: 為stu對象中名為name的屬性注入"孔乙己"作為值 -->
        <property name="name" value="孔乙己" ></property>
        <property name="age"  value="22" ></property>
        <property name="grade"  value="大三" ></property>
        <property name="rang"  value="1" ></property>
        <!-- 引用類型注入: 為course屬性注入下方配置的course對象 -->
        <property name="course"  ref="course" ></property>
    </bean>

    <!-- 将course對象配置到容器中 -->
    <bean name="course" class="com.spring.bean.Course" >
        <property name="name" value="Java開發" ></property>
        <property name="page" value="889" ></property>
    </bean>
           

(2)、構造函數注入:

<bean name="stu1" class="com.spring.bean.Student" >
    <!-- name屬性: 構造函數的參數名 -->
    <!-- index屬性: 構造函數的參數索引 -->
    <!-- type屬性: 構造函數的參數類型-->
    <constructor-arg name="name" index="0" type="java.lang.Integer" value="compasser"  ></constructor-arg>
    <constructor-arg name="course" ref="course" index="1" ></constructor-arg>
</bean>
           

關注微信公衆号compassblog,背景回複 “Spring系列一” 擷取本項目源碼

您可能還喜歡:

  • 【SSH架構】之Hibernate系列(一)
  • 【SSH架構】之Struts2系列(二)
  • 【SSH架構】之Struts2系列(一)
  • 前端系列之JavaScript基礎知識概述
  • 前端系列之CSS基礎知識概述

本系列後期仍會持續更新,歡迎關注!

如果你認為這篇文章有用,歡迎轉發分享給你的好友!

本号文章可以任意轉載,轉載請注明出處!

掃碼關注微信公衆号,了解更多

【SSH架構】之Spring系列(一)