Spring入門(一):建立Spring專案

周偉偉的技術部落格發表於2019-03-07

本篇部落格作為Spring入門系列的第一篇部落格,不會講解什麼是Spring以及Spring的發展史這些太理論的東西,主要講解下如何使用IntelliJ IDEA建立第一個Spring專案以及通過一個示例講解下Spring的簡單原理。

1.建立Spring專案

IDE:IntelliJ IDEA

1.1新建專案

Spring入門(一):建立Spring專案

1.2選擇專案型別

Spring入門(一):建立Spring專案

如果這裡忘記了選擇"Create empty spring-config.xml",也可以新建完專案再新建配置檔案

Spring入門(一):建立Spring專案

1.3確定專案名稱及儲存路徑

Spring入門(一):建立Spring專案

因為需要下載Spring依賴的包,因此需要載入一會

Spring入門(一):建立Spring專案

新建完的專案結構圖如下:

Spring入門(一):建立Spring專案

2.Spring簡單測試

新建一個Book類,定義兩個欄位bookName,author和一個例項方法printBookInfo()

public class Book {
    private String bookName;

    private String author;

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void printBookInfo() {
        System.out.println("Book Name:" + this.bookName + ",Author:" + this.author);
    }
}
複製程式碼

如果我們想要輸出圖書資訊,按照傳統的方式,需要以下幾步:

  1. 建立Book類的例項物件
  2. 設定例項物件的bookName欄位和author欄位
  3. 呼叫例項物件的printBookInfo()方法
public class Main {
    public static void main(String[] args) {

        Book book = new Book();
        book.setBookName("平凡的世界");
        book.setAuthor("路遙");

        book.printBookInfo();
    }
}
複製程式碼

執行結果:

Book Name:平凡的世界,Author:路遙

那麼在Spring專案中,如何實現同樣的呼叫呢?

首先,修改spring-config.xml,新增如下配置:

<bean id="book" class="Book">
    <property name="bookName" value="平凡的世界"></property>
    <property name="author" value="路遙"></property>
</bean>
複製程式碼

然後修改Main的方法為:

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

public class Main {
    public static void main(String[] args) {

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
        Book book = applicationContext.getBean("book", Book.class);
        book.printBookInfo();
    }
}
複製程式碼

執行結果:

Spring入門(一):建立Spring專案

我們會發現,執行結果和傳統方式一樣,只是多了一些Spring的日誌資訊。

在以上程式碼中,我們並未使用new運算子來建立Book類的例項,但是卻可以得到Book類的例項,這就是Spring的強大之處,所有類的例項的建立都不需要應用程式自己建立,而是交給Spring容器來建立及管理。

3.Spring簡單講解

雖說例項的建立交給Spring容器來建立及管理,但是在上述的程式碼中,什麼時候建立了Book類的例項並對欄位賦值了呢?

為驗證這個疑問,我們修改下Book類

public class Book {
    private String bookName;

    private String author;

    public Book(){
        System.out.println(("This is Book constructor."));
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        System.out.println("This is Book setBookName().");
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        System.out.println("This is Book setAuthor().");
        this.author = author;
    }

    public void printBookInfo() {
        System.out.println("Book Name:" + this.bookName + ",Author:" + this.author);
    }
}
複製程式碼

新增一個Author類

public class Author {
    private String name;

    private int age;

    public Author() {
        System.out.println(("This is Author constructor."));
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("This is Author setName().");
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        System.out.println("This is Author setAge().");
        this.age = age;
    }

    public void printAuthorInfo() {
        System.out.println("Name:" + this.name + ",Age:" + this.age);
    }
}
複製程式碼

修改下spring-config.xml檔案

<bean id="book" class="Book">
    <property name="bookName" value="平凡的世界"></property>
    <property name="author" value="路遙"></property>
</bean>
<bean id="author" class="Author">
    <property name="name" value="路遙"></property>
    <property name="age" value="60"></property>
</bean>
複製程式碼

最後,我們修改下Main類的程式碼來Debug下,看下程式碼的執行順序

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

public class Main {
    public static void main(String[] args) {

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");

        Book book = applicationContext.getBean("book", Book.class);
        book.printBookInfo();

        Author author = applicationContext.getBean("author", Author.class);
        author.printAuthorInfo();
    }
}
複製程式碼

為更直觀的展示,請看如下的Gif圖

Spring入門(一):建立Spring專案

從圖中,我們可以看出,在執行完 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");後,控制檯先輸出了以下內容:

This is Book constructor. This is Book setBookName(). This is Book setAuthor(). This is Author constructor. This is Author setName(). This is Author setAge().

也就是這句程式碼執行完後,Book類和Author類的例項已經被建立並且欄位已經被賦值,接下來的程式碼只是從Spring容器中獲取例項而已。

4.注意事項

獲取Bean時,第一個引數(bean name)要與spring-config.xml定義的bean id保持一致,比如我們在spring-config.xml中定義的是book,如果在獲取時寫的是Book,就會報錯

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

public class Main {
    public static void main(String[] args) {

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");

        // 錯誤的beanName
        Book book = applicationContext.getBean("Book", Book.class);
        book.printBookInfo();
    }
}
複製程式碼

報錯資訊如下:

Spring入門(一):建立Spring專案

5.參考連結

【Spring】IntelliJ IDEA搭建Spring環境

idea中Spring專案建立以及實現一個小的IoC案例

相關文章