帶妹學Java:Spring基礎篇

2021-03-02 漫話編程

教妹學 Java,沒見過這麼放肆的標題吧?「語不驚人死不休」,沒錯,本篇文章的標題就是這麼酷炫,不然你怎麼會點進來?

我有一個漂亮如花的妹妹(見上圖)。父母正考慮讓她向我學習,做一名正兒八經的 Java 程式設計師。我期初是反對的,因為程式設計師這行業容易掉頭髮。但家命難為啊,與其反對,不如做點更積極的事情,比如說寫點有趣的文章教教她。

「二哥,你怎麼現在才想起來要教我學 Spring 啊?」

「沒辦法啊,三妹,之前教妹學 Java 系列被噴的體無完膚,沒辦法就停滯了。今天決定走自己的路,讓別人也走自己的路去。」

「我就說嘛,Spring 在 Java 中佔據那麼重要的位置,你竟然沒捨得教我,還以為你怕被我拍死在沙灘上呢?」

「嗯,你天真了。」

01、Spring 簡史

「二哥,據說 Spring 前後經歷了 3 個時代,你能給我說說嗎?」

「沒問題啊。」

1)石器時代

也就是 Spring 1.x 時代,一個項目看上去全都是 xml 文件,裡面配置著各種各樣的 bean,項目越大,xml 文件就越多,到最後人都感覺不好了,像回到了原始社會。

2)黑鐵時代

也就是 Spring 2.x 時代,終於可以使用註解配置 bean 了,這主要得益於 JDK 1.5 新增的註解功能。想一想,一個小小的註解,比如說 @Component 、@Service 就可以替代一大段的 xml 配置代碼,簡直爽歪歪啊。

使用 xml 文件配置數據源,使用註解配置業務類,兩種方式相得益彰。

3)黃金時代

也就是 Spring 3.x 至今,可以使用 Java 配置的方式了。那什麼是 Java 配置呢?

其實從形式上看,Java 配置和註解配置沒什麼區別,因為 Java 配置也用的是註解,只不過,以前用 application-context.xml 配置數據源等信息,現在用 @Configuration 註解的類配置。

02、Spring 特性

「二哥,據說 Spring 的特性非常豐富,你能給我說說嗎?」

「沒問題啊。」

1)核心技術:依賴注入(DI)、面向切面編程(AOP)、國際化、數據綁定、類型轉換

2)測試:TestContext 框架、Spring MVC 測試

3)數據訪問:事務、JDBC、對象關係映射(ORM)

4)Spring MVC(一個模型 - 視圖 - 控制器「MVC」的 Web 框架)、Spring WebFlux(一個典型非阻塞異步的框架)

5)Spring Integration(面向企業應用集成)

03、Spring 生態

「二哥,據說 Spring 的生態圈非常火熱,你能給我說說嗎?」

「沒問題啊。」

1)Spring Boot:當下最火的一個 Spring 項目了,使用它我們可以快速搭建好一個項目

2)Spring Cloud:為分布式開發提供了強大的工具集

3)Spring Security:通過認真和授權保護應用

4)Spring Web Flow:基於 Spring MVC 的流程式 Web 應用

5)等等等等

04、快速搭建 Spring 項目

「二哥,說了那麼多,能不能來個上手項目,讓我瞧瞧 Spring 項目到底長什麼樣子?」

「馬上就來,三妹。」

我推薦使用 Intellij IDEA 作為集成開發工具,因為它插件豐富、功能全面。就我們目前的開發任務來說,社區版足夠用了。

1)打開 IDEA,依次點擊 File→New→Project→Maven。

2)點擊 Next 後填寫項目的名稱,然後創建項目。打開 pom.xml 文件,添加以下內容。

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.2.RELEASE</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

dependencies 節點下添加了 Spring 的核心依賴 spring-context,它為 Spring 提供了一個運行時的環境,用以保存各個對象的狀態。它依賴於 Spring 的四個核心組件:spring-aop、spring-beans、spring-core、spring-expression,也就是說只要引入 spring-context 的依賴,Maven 會自動引入這四個核心。

build 節點下添加了 Maven 的編譯插件,並且指定了 Java 的編譯版本為 1.8。

3)IDEA 下編輯文件會自動保存,所以與此同時,Maven 會將 Spring 的依賴包全部下載到本地倉庫中。

4)稍稍眯一會眼睛,就可以看到 Spring 的依賴包了。

5)Maven 是一個軟體項目管理工具,基於項目對象模型(Project Object Model,明白 pom.xml 的由來了吧?)的概念,可以管理項目依賴的 jar 包,對項目進行編譯打包等。

6)新建 HelloService 類,代碼如下:

@Service
public class HelloService {
    public void hello (String what) {
        System.out.println("hello " + what);
    }
}

@Service 註解一般在業務邏輯層使用。該類非常簡單,只有一個方法 hello(),參數是字符串,然後在控制臺列印 hello xxx。

7)新建 HelloConfig 類,代碼如下:

@Configuration
public class HelloConfig {
    @Bean
    public HelloService helloService() {
        return new HelloService();
    }
}

@Configuration 註解表明當前類是一個配置類,相當於 Spring 配置的一個 xml 文件。

@Bean 註解用在 helloService() 方法上,表明當前方法返回一個 Bean 對象(HelloService),然後將其交給 Spring 管理。產生這個 Bean 對象的方法只會被調用一次,隨後 Spring  將其放在自己的 IOC 容器中。

8)新建 HelloMain 類,代碼如下:

public class HelloMain {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HelloConfig.class);
        HelloService helloService = context.getBean(HelloService.class);
        helloService.hello("66666");
        context.close();
    }
}

HelloMain 類中有一個 main() 方法,它負責將當前項目跑起來。

AnnotationConfigApplicationContext 是一個用來管理註解 Bean 的容器,可以將 @Configuration 註解的類 Class 作為參數獲取容器對象。再通過 getBean() 方法獲取註冊的 Bean 對象。獲取到 HelloService 對象後,就可以讓它說一聲「66666」了。

「二哥,這篇文章中的示例代碼你上傳到碼雲了嗎?最近 GitHub 訪問起來有點卡。」

「你到挺貼心啊,三妹,碼雲傳送門~」

https://gitee.com/qing_gee/JavaPoint/tree/master

「二哥,你教得真不錯,我完全學會了,一點也不枯燥。」

「那必須得啊,期待下一篇吧?」

「那是當然啊,期待,非常期待,望眼欲穿的感覺。」

請允許我熱情地吐槽一下,這篇文章我不希望再被噴了,看在我這麼辛苦搞原創(創意+乾貨+有趣)的份上,多鼓勵鼓勵好不好?別瞅了,點在看唄,你最美你最帥

相關焦點

  • Java Web系列:Spring MVC基礎
    1.Web MVC基礎MVC的本質是表現層模式,我們以視圖模型為中心,將視圖和控制器分離出來。就如同分層模式一樣,我們以業務邏輯為中心,把表現層和數據訪問層代碼分離出來是一樣的方法。框架只能在技術層面上給我們幫助,無法在思考和過程上幫助我們,而我們很多人都不喜歡思考和嘗試。
  • 教妹學Java:Spring基礎篇
    本篇文章就打算通過我和三妹對話的形式來學一學「Spring 的基礎」。教妹學 Java,沒見過這麼放肆的標題吧?「語不驚人死不休」,沒錯,本篇文章的標題就是這麼酷炫,不然你怎麼會點進來?我有一個漂亮如花的妹妹(見上圖),她叫什麼呢?我想聰明的讀者能猜得出:沉默王三,沒錯,年方三六。
  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    寫這篇文章的目的是想總結一下自己這麼多年來使用java的一些心得體會,主要是和一些java基礎知識點相關的,所以也希望能分享給剛剛入門的Java程式設計師和打算入Java開發這個行當的準新手們,希望可以給大家一些經驗,能讓大家更好學習和使用Java。這次介紹的主要內容是和J2SE相關的部分,另外,會在以後再介紹些J2EE相關的、和Java中各個框架相關的內容。
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    下面請看java代碼我們通過ClassPathXmlApplicationContext類傳入applicationContext.xml配置文件的相對路徑,創建出spring的容器對象ApplicationContext,在通過容器對象中的方法獲取到Spring容器為我們創建的user對象,其實Spring兩個容器,除了
  • 五分鐘學Java:一篇文章搞懂spring和springMVC
    其實,spring生態中的內容豐富多彩,除了上圖提到的這些模塊,如今spring已經發展到了springboot和springcloud,為微服務等後端技術棧提供非常優質的解決方案。如今,spring框架已經成為Java程式設計師必知必會的內容了,那麼如何開始學習spring框架,就成為了我們今天要討論的主題。
  • Java 第一大框架:Spring 的 IoC 跟 AOP 雛形如何實現?
    SpringSpring make java more simple;Spring make java more modern;Spring make java more reactive;Spring make java more productive;Spring make java more cloud-ready。
  • Spring事務基礎
    /p"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:tx="http://www.springframework.org/schema/tx"
  • Java基礎之反射篇
    Java基礎之反射篇「Hello,大家好!我是老醜。今天給大家帶來的知識點是反射」1. 反射是什麼?反射(Reflection),它允許在運行中的Java程序獲取自身的信息,並且可以操作類或者對象的內部屬性。2. 反射可以做什麼?3.
  • 通過Idea創建Spring Boot java項目
    寫在前面,每個java程序開發,需要準備好相應的開發工具和java運行環境。這裡使用的開發工具是:idea64,使用的java環境是jdk1.8,使用的maven版本是:1 通過idea創建項目在idea工具的菜單欄,找到File按鈕,進行如下操作:File-New-Project,點擊Project...進入創建項目界面。
  • java retry(重試) spring retry, guava retrying 詳解
    隨著需求的不斷提出,怎麼去迭代升級,看看這篇文章,寫得很好!!一定要看完,哈哈!然後點個在看。作者:葉止水https://juejin.im/post/5b6ac0a06fb9a04f8a21b192系列說明java retry 的一步步實現機制。情景導入簡單的需求產品經理:實現一個按條件,查詢用戶信息的服務。
  • JAVA學習之路(總結)--基礎篇二
    JAVA學習之路(總結)--基礎篇二是在基礎篇一上的延續,想看基礎篇一的同學們,可以關注一下我呦,在我的歷史發布就可以看到。喵~~~~喵~~~~喵~~~~先說一個題外話~~~大家學習java一方面是為了興趣,當然另一方更想著賺更多的Money吧,嘿嘿嘿~就深圳來講,Java程式設計師薪資水平一般如下:應屆生:普通5K左右,能力強8K左右;1年工作經驗:普通8K,能力強1W+;2年工作經驗:普通9K,能力強1.2W+;3年工作經驗:普通1.5W+,
  • 搞Java的你還不會Spring?一篇文章帶你掌握
    本篇文章將帶你掌握Spring框架,滿滿的乾貨,內容有點多,希望你能有耐心看完,看完後一定會有所收穫。Spring容器在SpringIOC容器讀取Bean配置創建Bean之前,必須對它進行實例化。corp, int price) {this.brand = brand;this.corp = corp;this.price = price;}}在這個類中有兩個帶參的構造方法
  • java基礎|驗證ArrayList的線程不安全
    javaDEMO本網站記錄了最全的各種JavaDEMO ,保證下載,複製就是可用的,包括基礎的, 集合的, spring的, Mybatis的等等各種
  • Java Web系列:Spring依賴注入基礎
    Spring的基礎組件如下圖所示:從圖中可以看出,開始的模塊只有從core\beans\aop\context四個組件,後來添加了context-support【1.2】擴展模塊、expression【3.0】擴展模塊和beans-groovy【4.0】擴展模塊。
  • 「零基礎學JAVA」基礎篇 第二章 JAVA編程初體驗
    JAVA【零基礎學編程】系列今天給大家帶來基礎篇 第二章 JAVA編程初體驗本節的部分編碼操作需要先安裝JDK開發工具「零基礎學JAVA」工具篇 JDK的安裝教程(WINDOWS版)和環境變量的配置「零基礎學JAVA」工具篇
  • Spring SPI和Spring Boot SPI - 第345篇
    相關歷史文章(閱讀本文前,您可能需要先看下之前的系列👇)國內最全的Spring Boot系列之四DriverManager SPI分析和Java SPI原理  - 第344篇Java SPI一探究竟 - 第343篇前言       在前面的章節《DriverManager SPI分析和Java SPI原理》中,我們通過分析DriverManager的SPI和Java SPI的原理,對於SPI有了一個比較深的了解。
  • Java基礎之Socket篇
    SmileThe Royal Concept - SmileJava基礎之Socket篇Hello,大家好!我是老醜,今天分享的是一些關於Socket的知識。本文閱讀預計15分鐘左右。目錄-什麼是Socket?
  • 【Java開發必看】Spring基礎知識匯總
    本文非常詳細的介紹了Spring,如果你正想了解Spring,那麼這篇文章值得仔細閱讀(ps.本文適合有一定基礎的java學習者
  • Spring Boot中使用Mockito進行Web測試 - 第339篇
    相關歷史文章(閱讀本文前,您可能需要先看下之前的系列👇)國內最全的Spring Boot系列之三2020上半年發文匯總「值得收藏」Slf4j的前世今生之java日誌框架演化歷史 - 第334篇SpringBoot框架開發的優秀的項目「值得收藏學習」 - 第335從Spring整合第三方框架學習Spring Boot - 第336篇Mock工具之Mockito - 第337篇Spring Boot中使用Mockito - 第338篇悟纖:師傅,我上面mock的service
  • 重學Java 設計模式:實戰代理模式「模擬mybatis-spring中定義DAO...
    類似這樣的場景可以想到;你的資料庫訪問層面經常會提供一個較為基礎的應用,以此來減少應用服務擴容時不至於資料庫連接數暴增。agent │ │ │ ├── MapperFactoryBean.java │ │ │ ├── RegisterBeanFactory.java │ │ │ └── Select.java │ │ └──