SpringBoot詳解(一)-快速入門

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

一、Spring Boot

久聞Spring Boot大名,這兩天終于得空,學(xué)習(xí)了一把,發(fā)覺Spring Boot確實(shí)好用,那Spring Boot到底是什么,又是怎么好用呢?

什么是Spring Boot

目前ssm框架還是比較常用的,其中的ss指的無非就是Spring 和 SpringMVC,我們可以簡(jiǎn)單的認(rèn)為 "Spring Boot ≥ Spring + SpringMVC",沒錯(cuò),用了Spring Boot中涵蓋了Spring和SpringMVC等大量常用開發(fā)配置,而且Spring Boot的配置極其簡(jiǎn)單,可以讓你不用或者只需要很少的Spring配置就可以讓你的項(xiàng)目快速運(yùn)行起來。

Spring Boot的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  1. 快速構(gòu)建項(xiàng)目
  2. 對(duì)主流開發(fā)框架的無配置集成
  3. 項(xiàng)目可獨(dú)立運(yùn)行,無須外部依賴Servlet容器(Spring Boot默認(rèn)自帶了一個(gè)Tomcat)
  4. 提供運(yùn)行時(shí)的應(yīng)用監(jiān)控
  5. 極大地提高了開發(fā)、部署效率
  6. 與云計(jì)算的天然集成

缺點(diǎn)

  1. 坑有些多, 文檔略少

二、快速入門

1、Spring的Java配置方式

上面已經(jīng)提到了,使用Spring Boot,可以讓你不用或者只需要很少的Spring配置就可以讓你的項(xiàng)目快速運(yùn)行起來,說的就是使用代碼注解來取代xml配置。其實(shí)從Spring3.x開始就已經(jīng)提供了java配置方式,使用java配置方式可以更好的理解你配置的Bean,而如今的Spring4.x更是推薦java配置方式,java配置方式可以完全替代xml配置,下面就先來看看兩個(gè)最基本的注釋:

1)@Configuration 和 @Bean

Spring的java配置方式是通過@Configuration 和 @Bean這兩個(gè)注釋實(shí)現(xiàn)的:

  • @Configuration 作用于類上,相當(dāng)于一個(gè)xml配置文件
  • @Bean 作用于方法上,相當(dāng)于xml配置中的<bean>

2)小示例

該示例將通過java配置方式配置Spring,實(shí)現(xiàn)Spring IOC功能。

這是一個(gè)簡(jiǎn)單的模擬從數(shù)據(jù)庫獲取User數(shù)據(jù)的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;
    }
}

這是一個(gè)最最常見的Service,通過注入U(xiǎn)serDao,使用UserDao的方法獲取用戶數(shù)據(jù)。

@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開發(fā)不一樣了,這個(gè)類使用了2個(gè)新的注解,其中@Configuration表明該相當(dāng)于Spring的一個(gè)xml配置文件,@Bean將一開始的UserDao配置給Spring管理.

@Configuration// 通過注解來表明該類是一個(gè)Spring的配置,相當(dāng)于一個(gè)xml文件
public class SpringConfig {
    @Bean// 這里要注意,方法名"getUserDao"將作為UserDao在容器中的id
    public UserDao getUserDao() {
        return new UserDao();
    }
}

接下來就是獲取Spring容器,從容器中拿到UserService,并調(diào)用其獲取用戶數(shù)據(jù)的方法,代碼如下:

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

像普通的java程序一樣,直接運(yùn)行Test類中的main方法即可在控制臺(tái)看到用戶數(shù)據(jù)輸出了。

細(xì)心的你應(yīng)該發(fā)現(xiàn)了,以往獲取Spring容器使用到的類要么是ClassPathXmlApplicationContext 或是 FileSystemXmlApplicationContext,但Spring Boot使用的卻是AnnotationConfigApplicationContext,原因也好理解,因?yàn)槲覀僑pring Boot使用的是java配置的方式,而以往使用的是Spring的xml配置方式.

2、第一個(gè)Web應(yīng)用

通過上面的示例,我們已經(jīng)知道了java配置方式是怎么回事了,那接下來便正式開始使用Spring Boot來開發(fā)我們的第一個(gè)web應(yīng)用了.

1)pom.xml配置

設(shè)置spring boot的parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>

說明:Spring boot的項(xiàng)目必須要將parent設(shè)置為spring boot的parent,該parent包含了大量默認(rèn)的配置,大大簡(jiǎn)化了我們的開發(fā)。

導(dǎo)入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>

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

2)小示例

@SpringBootApplication// Spring Boot項(xiàng)目的核心注解,主要目的是開啟自動(dòng)配置
@Controller//標(biāo)明這是一個(gè)SpringMVC的Controller控制器
public class HelloApplication {

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

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

}

一般Spring Boot的Web應(yīng)用都有一個(gè)xxxApplication類,并使用@SpringBootApplication注解標(biāo)記,作為該web應(yīng)用的加載入口。此外,還需要在main方法中(可以是任意一個(gè)類)使用SpringApplication.run(xxxApplication.class, args)來啟動(dòng)該web應(yīng)用。

運(yùn)行HelloApplication中的main()方法,啟動(dòng)該web應(yīng)用后,在地址欄輸入"http://localhost:8080/hello",就可以看到輸出結(jié)果了。

3)運(yùn)行報(bào)錯(cuò)

如果你項(xiàng)目中沒有其他配置,那在運(yùn)行這個(gè)簡(jiǎn)單的項(xiàng)目時(shí)一般是不會(huì)報(bào)錯(cuò)的,但如果很不幸你第一次運(yùn)行就報(bào)錯(cuò)的話,也不用著急,大部分問題百度即可,本人在啟動(dòng)項(xiàng)目過程中遇到就"Cannot determine embedded database driver class for database type NONE"這樣的錯(cuò)誤,這樣就記錄一下,報(bào)錯(cuò)截圖如下:

原因是:springboot啟動(dòng)時(shí)會(huì)自動(dòng)注入數(shù)據(jù)源和配置jpa。

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

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

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

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

三、疑問

到這里是不是已經(jīng)大概感覺到了Spring Boot的高效和簡(jiǎn)潔了呢?配置就是如此簡(jiǎn)單,功能就是如此強(qiáng)大,但通過上面一系列的講解,你是不是也產(chǎn)生一些疑惑呢,比如:

  1. Spring Boot的WEB應(yīng)用默認(rèn)端口就是8080,那這個(gè)端口要怎么修改呢?
  2. 為什么會(huì)出現(xiàn)"Cannot determine embedded database driver class for database type NONE"這樣的錯(cuò)誤?(或者說為什么springboot啟動(dòng)時(shí)會(huì)自動(dòng)注入數(shù)據(jù)源和配置jpa)
  3. 為什么@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})就可以解決"Cannot determine embedded database driver class for database type NONE"這樣的錯(cuò)誤呢?
  4. 既然Spring Boot的WEB應(yīng)用默認(rèn)使用的是自帶的Tomcat,那要怎么部署到外部的Servlet容器呢?
  5. ...

不急,后續(xù)文章將會(huì)對(duì)這些問題一一解釋清楚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容