Spring學習系列(一) Spring簡介

Spring簡介

以前一直想寫點東西,可一直沒有開始實施,各類緣由都有,最大緣由可能仍是本身太懶了,嘿嘿。最近在看Spring in action這本書,爲了能讓本身堅持下去把書看完,此次決定同步的在博客園上寫個Spring系列欄目,期中部分代碼案例是本身發揮寫的,和書上不同,你們參考理解,有錢的小夥伴也能夠買一本本身看看。另外,因爲我不是什麼專業的編輯,也不多寫文章,全部文章中有個別病句或者錯別字的你們別介意,我本身也儘可能避免。前端

1、Spring簡介

在接觸java開發以前,我是一個 .net Developer,作了4年多的 .net後公司技術方向開始全面轉向java,又得從菜鳥階段開始學習java web方面的知識,剛開始接觸Spring的時候並不知道它具體到底能作什麼,學習java web開發的大部分應該都知道model1=>model2=>MVC這樣的演變過程,可這裏主要注重的仍是前端界面和後臺服務代碼的交互方式升級,若是拋除掉這部分,咱們在實現複雜業務邏輯的時候,確定會用到不少的業務類,第三方組件等,還有涉及到數據庫的訪問,咱們後臺服務的代碼結構該怎麼處理呢?java

之前作 .net的時候第一個階段,全部代碼都寫在一塊兒,界面處理,業務邏輯,數據訪問都在一個類裏面,而後就是開始三層架構,把業務層、數據訪問層、對象模型層分開,代碼結構更清晰,更容易維護,再下一個階段隨着系統愈來愈複雜,爲了更好的可維護性,開始在各層之間增長接口,使用面向接口的編程,慢慢的把代碼的耦合性下降。全部道理都是互通的,Spring已個人個人理解,它的使命就是儘可能的簡化Java開發工做,爲了下降Java開發的複雜性,讓咱們的代碼結構更簡潔明瞭,更易維護,增長代碼的重複利用。總結下來,爲了下降Java開發的複雜性,Spring採起了如下4中策略web

  • 基於POJO的輕量級和最小侵入性編程
  • 經過依賴注入和麪向接口實現鬆耦合
  • 基於切面和慣例進行聲明式編程
  • 經過切面和模板減小樣板式代碼
一、基於POJO的輕量級和最小侵入性編程

Spring竭力的避免因自身API而弄亂項目的代碼,她不會強迫你實現Spring規範的接口或者繼承Spring的類,咱們本身編寫的java類在Spring以外也能夠無缺的運行,因此Spring提供的一種非引入性或者最小引入性的編程。spring

二、依賴注入

首先簡單說明下什麼是依賴注入,依照慣例,第一個例子怎麼能少的了Hello World呢,嘿嘿,請看代碼,首先咱們定義一個HelloWorld的類:數據庫

public class HelloWorld {
    
    /*
     * syaHello方法,和世界說你好。
     */
    public void sayHello(){
        System.out.println("Hello World!");
    }
}

如今咱們已經用java代碼實現了咱們的第一個類,調用sayHello()方法就能夠向這個世界說一聲Hello了,可咱們本身說話的聲音過小,聽到的人太少,怎麼辦呢?咱們須要藉助一些工具來讓更多的人聽到,下面咱們定義一個工具類編程

public class RadioTool {

    public void say(String message){
        System.out.println(message);
    }
}

咱們來修改下以前的HelloWorld類:架構

public class HelloWorld {
    
    /*
     * 定義說話工具
     */
    private RadioTool radio;

    public RadioTool getSayTool() {
        return radio;
    }

    public void setSayTool(RadioTool radio) {
        this.radio = radio;
    }
    
    /*
     * syaHello方法,和世界說你好。
     */
    public void sayHello(){
        //使用工具
        radio.say("Hello World!");
    }
}

下面咱們來測試下程序ide

import com.seven.springTest.service.impl.HelloWorld;
import com.seven.springTest.service.impl.RadioTool;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //定義HelloWorld對象
        HelloWorld hw= new HelloWorld();
        //定義SayTool工具對象
        RadioTool radio = new RadioTool();
        //把工具對象賦給HelloWorld對象hw
        hw.setSayTool(radio);
        //調用hw的sayHello()說出「Hello World」
        hw.sayHello();
    }
}

好了,咱們的案例代碼寫完了,咱們的HelloWorld類依靠RadioTool類向更多的人說出「Hello World」,HellWorld類對RadioTool類就是一種依賴關係,若是沒有RadioTool類,它就沒辦法讓更多的人聽到。傳統的方式,咱們經過代碼來手動的給對象注入依賴,咱們構造一個RadioTool的實例並經過setSayTool()方法賦給HelloWorld實例,這個過程就是一種依賴注入,只不過這個注入是由咱們本身經過代碼來完成的。耦合性很是強,若是咱們代碼在編寫的時候不知道要給HelloWorld提供RadioTool類對象,那麼程序就會報錯,另外若是有一天咱們須要更換新的工具,咱們就必須從新編寫代碼。代碼維護性就比較差。爲了更好的解除HelloWorld和RadioTool之間的耦合性,咱們引入面向接口的編程,首先咱們定義通用的工具類接口:工具

package com.seven.springTest.service;

public interface SayTool {
    
    public void say(String message);
}

而後咱們修改以前的RadioTool類,讓它繼承SayTool接口學習

package com.seven.springTest.service.impl;

import com.seven.springTest.service.SayTool;

public class RadioTool implements SayTool {

    public void say(String message){
        System.out.println(message);
    }
}

咱們來修改HelloWorld類

import com.seven.springTest.service.SayTool;

public class HelloWorld {
    
    /*
     * 定義說話工具
     */
    private SayTool tool;

    public HelloWorld(SayTool tool){
        this.tool=tool;
    }
    
    /*
     * syaHello方法,和世界說你好。
     */
    public void sayHello(){
        //使用工具
        tool.say("Hello World!");
    }
}

這裏咱們以前依賴的RadioTool更換成了SayTool接口對象,HelloWorld類與SayTool接口之間耦合,而不是與具體的SayTool接口實現類來耦合,咱們能夠很方便的替換實現方式。同門在再定義一個電視工具

import com.seven.springTest.service.SayTool;

public class TVTool implements SayTool {

    @Override
    public void say(String message) {
        System.out.println(message);
    }
}

咱們分別定義了RadioTool和TVTool兩種SayTool接口的具體實現類,HelloWorld類中依賴的是SayTool接口,全部能夠很方便的更換具體的實現,而不用在從新編寫代碼。一般狀況下咱們定義接口變量,並經過實例化具體的實現類來給接口對象賦予具體的實現,==這種建立應用組件以前的協做的行爲一般稱爲裝配==,針對給接口提供哪個具體的實現,也就是裝配哪種具體的實現bean,在Spring中提供了多種方式,主要包括3種:

  • 在XML中進行顯式的配置
  • 在Java類中進行顯式的配置
  • 隱式的bean發現機制和自動裝配 在後面的章節會分別介紹這幾種方式若是工做。
相關文章
相關標籤/搜索