SpringBoot(一)之快速入門

1、Spring Boot

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

什麼是Spring Boot

目前ssm框架仍是比較經常使用的,其中的ss指的無非就是Spring 和 SpringMVC,咱們能夠簡單的認爲 "Spring Boot ≥ Spring + SpringMVC",沒錯,用了Spring Boot中涵蓋了Spring和SpringMVC等大量經常使用開發配置,並且Spring Boot的配置極其簡單,可讓你不用或者只須要不多的Spring配置就可讓你的項目快速運行起來。web

Spring Boot的優缺點

優勢

  1. 快速構建項目
  2. 對主流開發框架的無配置集成
  3. 項目可獨立運行,無須外部依賴Servlet容器(Spring Boot默認自帶了一個Tomcat)
  4. 提供運行時的應用監控
  5. 極大地提升了開發、部署效率
  6. 與雲計算的自然集成

缺點

  1. 坑有些多, 文檔略少

2、快速入門

一、Spring的Java配置方式

上面已經提到了,使用Spring Boot,可讓你不用或者只須要不多的Spring配置就可讓你的項目快速運行起來,說的就是使用代碼註解來取代xml配置。其實從Spring3.x開始就已經提供了java配置方式,使用java配置方式能夠更好的理解你配置的Bean,而現在的Spring4.x更是推薦java配置方式,java配置方式能夠徹底替代xml配置,下面就先來看看兩個最基本的註釋:spring

1)@Configuration 和 @Bean

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

  • @Configuration 做用於類上,至關於一個xml配置文件
  • @Bean 做用於方法上,至關於xml配置中的

2)小示例

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

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

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管理.maven

@Configuration// 經過註解來代表該類是一個Spring的配置,至關於一個xml文件
public class SpringConfig {
    @Bean// 這裏要注意,方法名"getUserDao"將做爲UserDao在容器中的id
    public UserDao getUserDao() {
        return new UserDao();
    }
}

接下來就是獲取Spring容器,從容器中拿到UserService,並調用其獲取用戶數據的方法,代碼以下:spring-boot

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配置方式.

二、第一個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 {
    ...
}

3、疑問

到這裏是否是已經大概感受到了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. ...

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

相關文章
相關標籤/搜索