SpringBoot詳解(一)-快速入門

GitLqr發表於2017-08-30

SpringBoot詳解系列文章:
SpringBoot詳解(一)-快速入門
SpringBoot詳解(二)-Spring Boot的核心
SpringBoot詳解(三)-Spring Boot的web開發
SpringBoot詳解(四)-優雅地處理日誌

一、Spring Boot

久聞Spring Boot大名,這兩天終於得空,學習了一把,發覺Spring Boot確實好用,那Spring Boot到底是什麼,又是怎麼好用呢?

什麼是Spring Boot

目前ssm框架還是比較常用的,其中的ss指的無非就是Spring 和 SpringMVC,我們可以簡單的認為 "Spring Boot ≥ Spring + SpringMVC",沒錯,用了Spring Boot中涵蓋了Spring和SpringMVC等大量常用開發配置,而且Spring Boot的配置極其簡單,可以讓你不用或者只需要很少的Spring配置就可以讓你的專案快速執行起來。

Spring Boot的優缺點

優點

  1. 快速構建專案
  2. 對主流開發框架的無配置整合
  3. 專案可獨立執行,無須外部依賴Servlet容器(Spring Boot預設自帶了一個Tomcat)
  4. 提供執行時的應用監控
  5. 極大地提高了開發、部署效率
  6. 與雲端計算的天然整合

缺點

  1. 坑有些多, 文件略少

二、快速入門

1、Spring的Java配置方式

上面已經提到了,使用Spring Boot,可以讓你不用或者只需要很少的Spring配置就可以讓你的專案快速執行起來,說的就是使用程式碼註解來取代xml配置。其實從Spring3.x開始就已經提供了java配置方式,使用java配置方式可以更好的理解你配置的Bean,而如今的Spring4.x更是推薦java配置方式,java配置方式可以完全替代xml配置,下面就先來看看兩個最基本的註釋:

1)@Configuration 和 @Bean

Spring的java配置方式是通過@Configuration 和 @Bean這兩個註釋實現的:

  • @Configuration 作用於類上,相當於一個xml配置檔案
  • @Bean 作用於方法上,相當於xml配置中的

2)小示例

該示例將通過java配置方式配置Spring,實現Spring IOC功能。

這是一個簡單的模擬從資料庫獲取User資料的Dao類(注意,它並沒有使用任何註解,也就是說UserDao目前並沒有交給Spring容器管理)。

public class UserDao {
    public List<String> queryUserList() {
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add("User " + i);
        }
        return list;
    }
}複製程式碼

這是一個最最常見的Service,通過注入UserDao,使用UserDao的方法獲取使用者資料。

@Service
public class UserService {

    @Autowired
    UserDao userDao;

    public void getUserList() {
        List<String> list = userDao.queryUserList();
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

}複製程式碼

從這裡開始就跟以往的Spring開發不一樣了,這個類使用了2個新的註解,其中@Configuration表明該相當於Spring的一個xml配置檔案,@Bean將一開始的UserDao配置給Spring管理.

@Configuration// 通過註解來表明該類是一個Spring的配置,相當於一個xml檔案
public class SpringConfig {
    @Bean// 這裡要注意,方法名"getUserDao"將作為UserDao在容器中的id
    public UserDao getUserDao() {
        return new UserDao();
    }
}複製程式碼

接下來就是獲取Spring容器,從容器中拿到UserService,並呼叫其獲取使用者資料的方法,程式碼如下:

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService userService = (UserService) acac.getBean("userService");
        userService.getUserList();
    }
}複製程式碼

像普通的java程式一樣,直接執行Test類中的main方法即可在控制檯看到使用者資料輸出了。

細心的你應該發現了,以往獲取Spring容器使用到的類要麼是ClassPathXmlApplicationContext 或是 FileSystemXmlApplicationContext,但Spring Boot使用的卻是AnnotationConfigApplicationContext,原因也好理解,因為我們Spring Boot使用的是java配置的方式,而以往使用的是Spring的xml配置方式.

2、第一個Web應用

通過上面的示例,我們已經知道了java配置方式是怎麼回事了,那接下來便正式開始使用Spring Boot來開發我們的第一個web應用了.

1)pom.xml配置

設定spring boot的parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>複製程式碼

說明:Spring boot的專案必須要將parent設定為spring boot的parent,該parent包含了大量預設的配置,大大簡化了我們的開發。

匯入spring boot的web支援

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>複製程式碼

新增Spring boot的外掛

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>複製程式碼

通過上面簡單的3步配置,Spring Boot就配置完畢了,相比以往的Spring、SpringMVC配置是不是要簡潔的多呢?

2)小示例

@SpringBootApplication// Spring Boot專案的核心註解,主要目的是開啟自動配置
@Controller//標明這是一個SpringMVC的Controller控制器
public class HelloApplication {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "hello world";
    }

    // 在main方法中啟動一個應用,即:這個應用的入口
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }

}複製程式碼

一般Spring Boot的Web應用都有一個xxxApplication類,並使用@SpringBootApplication註解標記,作為該web應用的載入入口。此外,還需要在main方法中(可以是任意一個類)使用SpringApplication.run(xxxApplication.class, args)來啟動該web應用。

執行HelloApplication中的main()方法,啟動該web應用後,在位址列輸入"http://localhost:8080/hello",就可以看到輸出結果了。

3)執行報錯

如果你專案中沒有其他配置,那在執行這個簡單的專案時一般是不會報錯的,但如果很不幸你第一次執行就報錯的話,也不用著急,大部分問題百度即可,本人在啟動專案過程中遇到就"Cannot determine embedded database driver class for database type NONE"這樣的錯誤,這樣就記錄一下,報錯截圖如下:

原因是:springboot啟動時會自動注入資料來源和配置jpa。

解決方法:在@SpringBootApplication中排除其注入

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})

所以,上面的程式碼修改如下即可:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
@Controller
public class HelloApplication {
    ...
}複製程式碼

三、疑問

到這裡是不是已經大概感覺到了Spring Boot的高效和簡潔了呢?配置就是如此簡單,功能就是如此強大,但通過上面一系列的講解,你是不是也產生一些疑惑呢,比如:

  1. Spring Boot的WEB應用預設埠就是8080,那這個埠要怎麼修改呢?
  2. 為什麼會出現"Cannot determine embedded database driver class for database type NONE"這樣的錯誤?(或者說為什麼springboot啟動時會自動注入資料來源和配置jpa)
  3. 為什麼@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})就可以解決"Cannot determine embedded database driver class for database type NONE"這樣的錯誤呢?
  4. 既然Spring Boot的WEB應用預設使用的是自帶的Tomcat,那要怎麼部署到外部的Servlet容器呢?
  5. ...

不急,後續文章將會對這些問題一一解釋清楚。

相關文章