javascript
SpringBoot初步入门
文章目錄
- 1. SpringBoot概述
- 1.1什么是SpringBoot
- 1.2 SpringBoot的特點
- 2. 快速入門
- 2.1 創建工程并引入依賴
- 2.2 編寫controller
- 2.3 啟動測試
- 2.4 優化入門程序
- 2.4.1 添加引導類
- 2.4.2 @SpringBootApplication
- 2.4.3 @SpringBootConfiguration
- 3. 默認配置原理
- 3.1 以前的配置
- 3.2 嘗試java配置
- 3.2.1 引入依賴
- 3.2.2 添加jdbc.properties
- 3.2.3 配置數據源
- 3.2.4 測試
- 3.3 SpringBoot的屬性注入
- 3.3.1 @Autowired注入
- 3.3.2 構造函數注入
- 3.3.3 @Bean方法的參數注入
- 3.3.4 快速注入
- 4. 總結
1. SpringBoot概述
1.1什么是SpringBoot
SpringBoot是Spring項目中的一個子工程,與我們所熟知的Spring-framework 同屬于spring的產品:
人們把Spring Boot稱為搭建程序的腳手架。其最主要作用就是幫我們快速的構建龐大的spring項目,并且盡可能的減少一切xml配置,做到開箱即用,迅速上手,讓我們關注于業務而非配置。
我們可以使用SpringBoot創建java應用,并使用java –jar 啟動它,就能得到一個生產級別的web工程。
1.2 SpringBoot的特點
Spring Boot 主要特征是:
- 創建獨立的spring應用程序
- 直接內嵌tomcat、jetty和undertow(不需要打包成war包部署)
- 提供了固定化的“starter”配置,以簡化構建配置
- 盡可能的自動配置spring和第三方庫
- 提供產品級的功能,如:安全指標、運行狀況監測和外部化配置等
- 絕對不會生成代碼,并且不需要XML配置
總之,Spring Boot為所有 Spring 的開發者提供一個開箱即用的、非??焖俚?、廣泛接受的入門體驗
2. 快速入門
2.1 創建工程并引入依賴
創建一個maven項目,引入依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zh</groupId><artifactId>springboot</artifactId><version>1.0-SNAPSHOT</version><!-- 所有的springboot的工程都以spring父工程為父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies> </project>為了讓SpringBoot幫我們完成各種自動配置,我們必須引入SpringBoot提供的自動配置依賴,我們稱為啟動器。spring-boot-starter-parent工程將依賴關系聲明為一個或者多個啟動器,我們可以根據項目需求引入相應的啟動器,因為我們是web項目,這里我們引入web啟動器。
需要注意的是,我們并沒有在這里指定版本信息。因為SpringBoot的父工程已經對版本進行了管理了。
這個時候,我們會發現項目中多出了大量的依賴:
這些都是SpringBoot根據spring-boot-starter-web這個依賴自動引入的,而且所有的版本都已經管理好,不會出現沖突。
2.2 編寫controller
@RestController @RequestMapping("hello") @EnableAutoConfiguration //啟動自動配置 public class Hello {@GetMapping("test1")public String test1(){return "Hello SpringBoot 1";}public static void main(String[] args) {SpringApplication.run(Hello.class,args);} }@EnableAutoConfiguration
開啟spring應用程序的自動配置,SpringBoot基于你所添加的依賴和你自己定義的bean,試圖去猜測并配置你想要的配置。比如我們引入了spring-boot-starter-web,而這個啟動器中幫我們添加了tomcat、SpringMVC的依賴。此時自動配置就知道你是要開發一個web應用,所以就幫你完成了web及SpringMVC的默認配置了!
SpringBoot內部對大量的第三方庫或Spring內部庫進行了默認配置,這些配置是否生效,取決于我們是否引入了對應庫所需的依賴,如果有那么默認配置就會生效。
所以,我們使用SpringBoot構建一個項目,只需要引入所需依賴,配置就可以交給SpringBoot處理了。
2.3 啟動測試
2.4 優化入門程序
2.4.1 添加引導類
通常請求下,我們在一個springboot工程中都會在基包下創建一個引導類,一些springboot的全局注解(@EnableAutoConfiguration注解)以及springboot程序的入口main方法都放在該類中。
在springboot的程序的基包下(引導類和Controller包在同級目錄下),創建TestApplication.class:
@EnableAutoConfiguration//自動配置 @ComponentScan //自動掃描包 相當于`<context:component-scan />` public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class,args);} }并修改HelloController,去掉main方法及@EnableAutoConfiguration:
@RestController @RequestMapping("hello") public class HelloController {@GetMapping("test1")public String test1(){return "Hello SpringBoot 1";} }測試引導類
2.4.2 @SpringBootApplication
我們現在的引導類中使用了@EnableAutoConfiguration和@ComponentScan注解,有點麻煩。springboot提供了一種簡便的玩法:@SpringBootApplication注解
@SpringBootApplication public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);}}查看源碼
發現@SpringBootApplication其實是一個組合注解,這里重點的注解有3個:
- @SpringBootConfiguration
- @EnableAutoConfiguration:開啟自動配置
- @ComponentScan:開啟注解掃描
2.4.3 @SpringBootConfiguration
通過這段我們可以看出,在這個注解上面,又有一個@Configuration注解。通過上面的注釋閱讀我們知道:這個注解的作用就是聲明當前類是一個配置類,然后Spring會自動掃描到添加了@Configuration的類,并且讀取其中的配置信息。而@SpringBootConfiguration是來聲明當前類是SpringBoot應用的配置類,項目中只能有一個。所以一般我們無需自己添加。
3. 默認配置原理
3.1 以前的配置
事實上,在Spring3.0開始,Spring官方就已經開始推薦使用java配置來代替傳統的xml配置了,我們不妨來回顧一下Spring的歷史:
-
Spring1.0時代
在此時因為jdk1.5剛剛出來,注解開發并未盛行,因此一切Spring配置都是xml格式,想象一下所有的bean都用xml配置,細思極恐啊,心疼那個時候的程序員2秒
-
Spring2.0時代
Spring引入了注解開發,但是因為并不完善,因此并未完全替代xml,此時的程序員往往是把xml與注解進行結合,貌似我們之前都是這種方式。
-
Spring3.0及以后
3.0以后Spring的注解已經非常完善了,因此Spring推薦大家使用完全的java配置來代替以前的xml,不過似乎在國內并未推廣盛行。然后當SpringBoot來臨,人們才慢慢認識到java配置的優雅。
有句古話說的好:擁抱變化,擁抱未來。所以我們也應該順應時代潮流,做時尚的弄潮兒,一起來學習下java配置的玩法。
3.2 嘗試java配置
java配置主要靠java類和一些注解來達到和xml配置一樣的效果,比較常用的注解有:
- @Configuration:聲明一個類作為配置類,代替xml文件
- @Bean:聲明在方法上,將方法的返回值加入Bean容器,代替<bean>標簽
- @Value:屬性注入
- @PropertySource:指定外部屬性文件。
3.2.1 引入依賴
<dependency><groupId>com.github.drtrang</groupId><artifactId>druid-spring-boot2-starter</artifactId><version>1.1.10</version> </dependency>3.2.2 添加jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/leyou jdbc.username=root jdbc.password=1233.2.3 配置數據源
@Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfiguration {@Value("${jdbc.url}")String url;@Value("${jdbc.driverClassName}")String driverClassName;@Value("${jdbc.username}")String username;@Value("${jdbc.password}")String password;@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(url);dataSource.setUsername(driverClassName);dataSource.setDriverClassName(username);dataSource.setPassword(password);return dataSource;} }解讀:
- @Configuration:聲明JdbcConfiguration是一個配置類。
- @PropertySource:指定屬性文件的路徑是:classpath:jdbc.properties
- 通過@Value為屬性注入值。
- 通過@Bean將 dataSource()方法聲明為一個注冊Bean的方法,Spring會自動調用該方法,將方法的返回值加入Spring容器中。相當于以前的bean標簽
然后就可以在任意位置通過@Autowired注入DataSource了!
3.2.4 測試
3.3 SpringBoot的屬性注入
在上面的案例中,我們實驗了java配置方式。不過屬性注入使用的是@Value注解。這種方式雖然可行,但是不夠強大,因為它只能注入基本類型值。
在SpringBoot中,提供了一種新的屬性注入方式,支持各種java基本數據類型及復雜類型的注入。
新建JdbcProperties,用來進行屬性注入:
-
在類上通過@ConfigurationProperties注解聲明當前類為屬性讀取類
-
prefix="jdbc"讀取屬性文件中,前綴為jdbc的值。
-
在類上定義各個屬性,名稱必須與屬性文件中jdbc.后面部分一致,并且必須具有getter和setter方法
-
需要注意的是,這里我們并沒有指定屬性文件的地址,SpringBoot默認會讀取文件名為application.properties的資源文件。將jdbc中的內容粘貼到application中
在JdbcConfiguration中使用這個屬性: -
通過@EnableConfigurationProperties(JdbcProperties.class)來聲明要使用JdbcProperties這個類的對象
-
然后你可以通過以下方式在JdbcConfiguration類中注入JdbcProperties:
3.3.1 @Autowired注入
@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {@Autowiredprivate JdbcProperties jdbcProperties;@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(jdbcProperties.getUrl());dataSource.setUsername(jdbcProperties.getUsername());dataSource.setDriverClassName(jdbcProperties.getDriverClassName());dataSource.setPassword(jdbcProperties.getPassword());return dataSource;} }3.3.2 構造函數注入
@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {private JdbcProperties jdbcProperties;public JdbcConfiguration(JdbcProperties jdbcProperties){this.jdbcProperties = jdbcProperties;}@Beanpublic DataSource dataSource() {// 略}}3.3.3 @Bean方法的參數注入
@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {@Beanpublic DataSource dataSource(JdbcProperties jdbcProperties) {// ...} }3.3.4 快速注入
事實上,如果一段屬性只有一個Bean需要使用,我們無需將其注入到一個類(JdbcProperties)中。而是直接在需要的地方聲明即可:
@Configuration public class JdbcConfiguration {@Bean// 聲明要注入的屬性前綴,SpringBoot會自動把相關屬性通過set方法注入到DataSource中@ConfigurationProperties(prefix = "jdbc")public DataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();return dataSource;} }直接把@ConfigurationProperties(prefix = "jdbc")聲明在需要使用的@Bean的方法上,然后SpringBoot就會自動調用這個Bean(此處是DataSource)的set方法,然后完成注入。使用的前提是:該類必須有對應屬性的set方法!
4. 總結
SpringBoot為我們提供了默認配置,而默認配置生效的條件一般有兩個:
- 你引入了相關依賴
- 你自己沒有配置
1)啟動器
之所以,我們如果不想配置,只需要引入依賴即可,而依賴版本我們也不用操心,因為只要引入了SpringBoot提供的stater(啟動器),就會自動管理依賴及版本了。
因此,玩SpringBoot的第一件事情,就是找啟動器,SpringBoot提供了大量的默認啟動器
2)全局配置
另外,SpringBoot的默認配置,都會讀取默認屬性,而這些屬性可以通過自定義application.properties文件來進行覆蓋。這樣雖然使用的還是默認配置,但是配置中的值改成了自定義的。
因此,玩SpringBoot的第二件事情,就是通過application.properties來覆蓋默認屬性值,形成自定義配置。
總結
以上是生活随笔為你收集整理的SpringBoot初步入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (数据结构与算法)插入排序和希尔排序
- 下一篇: (SpringMVC)拦截器