SpringBoot詳解(一)-快速入門

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 {@AutowiredUserDao 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在容器中的idpublic 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")@ResponseBodypublic 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. ...

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280653.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

龍芯上跑WTM,為國產化做點貢獻

點擊上方藍字關注我哦“信創”&#xff0c;是一項國家戰略&#xff0c;即信息技術應用創新產業&#xff0c;它是數據安全、網絡安全的基礎&#xff0c;也是新基建的重要組成部分。信創從名稱上來看本意指向創新&#xff0c;但是自從漂亮國親手撕碎了“科技沒有國界”的謊言之后…

Class與Style綁定

對于數據綁定&#xff0c;一個常見的需求是操作元素的class列表和它的內聯樣式。因為它們都是attribute&#xff0c;我們可以用v-bind處理它們&#xff1a;只需要計算出表達式最終的字符串。不過&#xff0c;字符串拼接麻煩又易錯。因此&#xff0c;在v-bind用于class和style時…

PHP安裝之configure的配置參數

1、生成環境安裝配置如下 要求安裝如下庫&#xff1a; imagickgdmysqlmysqlimysqlndphalconPharsoapsocketsxwebxsvczipzlib 具體查看 vim php-config 就可以知道是如何配置的 --prefix/home/php --with-config-file-path/home/php/etc --with-mysql --with-pdo-oci --with-ope…

Django05: 請求生命周期流程圖/路由層

請求生命周期流程圖 擴展知識&#xff1a; 緩存數據庫 路由層 路由匹配 url(r^test/, views.test), 1. 第一個參數是正則匹配。 只要第一個匹配了&#xff0c;就不會執行下面。 輸入url會默認加斜杠&#xff0c;django會重定向 a. 一次匹配不行 b. url再加斜杠匹配 可以…

facebook 分享頁面_Facebook個人資料,頁面和組之間有什么區別?

facebook 分享頁面Facebook is used by a lot of different people for a lot of different things, so it’s only natural that Facebook would have different sets of features for each of them. There are three main ways you can use Facebook: with a regular Profile…

zabbix運行腳本監控ggsci報錯

/u01/app/oracle/oracle/ogg/ggsci: error while loading shared libraries: libdb-6.1.so: cannot open shared object file: No such file or directory增加腳本環境變量設置PATH$PATH:$HOME/binexport ORACLE_BASE/u01/app/oracleexport ORACLE_HOME$ORACLE_BASE/11/db_1exp…

一句話設計原則

面向對象的可復用設計&#xff08; Object Oriented Design / OOD&#xff09; 1. 開閉原則 (Open Closed Principle) 對擴展開放&#xff0c;對修改關閉 2. 里氏代換原則(LSP) 1.可以使用基類的地方&#xff0c;其子類必然也能使用 2.并且原功能不會受到任何影響 -- 經典案例,…

postman--安裝及Interceptor插件

1. 官網安裝&#xff08;看網速-我下載的時候一直下載失敗&#xff09;打開官網&#xff0c;https://www.getpostman.com選擇ios或者win 2. 非官網安裝 https://pan.baidu.com/s/1mstsimqO3ZC5m9z8czxVnA 密碼&#xff1a;q6yp 安裝postman 3.需要安裝分享的藍燈安裝包&#xf…

亞馬遜標題自動抓取_如何為您的家人提供自動Amazon禮品卡津貼

亞馬遜標題自動抓取When your kids move away to go to school, they’ll probably phone home every once in a while to ask for money. If they shop a lot on Amazon (and they probably do), you can expedite that process by setting up an automatically recurring dep…

Django04-2: ORM關系表\字段補充

一、表與表關系 一對多 多對多 一對一 圖書表 出版社 作者表 作者詳情表 出版社 和 圖書表 關系 一對多 外鍵字段在多的一方 book 圖書表 和 作者表 關系 多對多 需要創建第三張表 作者表 和 作者詳情表 關系 一對一 #創建表關系 先將基表創建 再添加外鍵字段 一對多…

我 與 TDesignBlazor 的故事

前言作者打拼了 .NET 十多年&#xff0c;屬于全棧應用類型的工程師&#xff0c;特別是對于前端的技術情有獨鐘&#xff0c;從純js到jquery&#xff0c;從bootstrap到自己寫css&#xff0c;從web到winform&#xff0c;還寫過一段時間的knockout.js&#xff0c;以至于公司里的前端…

實驗數據

1.整段deng音頻200多秒 2.加xx(1000:1480)之后 轉載于:https://www.cnblogs.com/20179302yzl/p/10270632.html

25個好用的Shell腳本常用命令分享

1.列出所有目錄使用量&#xff0c;并按大小排序。復制代碼 代碼如下:ls|xargs du -h|sort -rn #不遞歸下級目錄使用du -sh2.查看文件排除以#開關和空白行&#xff0c;適合查看配置文件。復制代碼 代碼如下:egrep -v "^#|^$" filenamesed /#.*$/d; /^ *$/d3.刪除空格…

mysql中查詢一個字段屬于哪一個數據庫中的哪一個表的方式

mysql中查詢一個字段具體是屬于哪一個數據庫的那一張表&#xff1a;用這條語句就能查詢出來,其中 table_schema 是所在庫, table_name 是所在表 --mysql中查詢某一個字段名屬于哪一個庫中的哪一張表 select table_schema,table_name from information_schema.columns where col…

macos剪切_如何使用macOS的內置“ Kill and Yank”作為替代剪切和粘貼

macos剪切Everyone knows about cutting and pasting by now. But did you know that your Mac sort of has a second clipboard known as kill and yank? 現在&#xff0c;每個人都知道剪切和粘貼。 但是您是否知道Mac上還有第二個剪貼板&#xff0c;稱為“ kill and yank”&…

ExtJS 折線圖趟過的坑

問題&#xff1a; 1、根據條件檢索后繪制折線圖&#xff0c;之前的坐標沒有清除如圖 解決方案&#xff1a; 在繪制之前&#xff0c;清空坐票&#xff1a; leftLine.surface.removeAll(); leftLine.redraw(false); 完整代碼如下 storeBar.load({params: { SDate: bTime, EDate: …

EventBus的實現

EventBus概要 EventBus是消息傳遞的一種方式&#xff0c;基于一個消息中心&#xff0c;訂閱和發布消息的模式。這種方式的實現不僅僅局限于前端&#xff0c;在iOS中的消息消息中心也是如此實現。 設計模式&#xff1a;訂閱者發布者模式&#xff0c;這種設計模式在前端很常見。A…

Django05-1: 有名分組、無名分組與反向解析

有名、無名分組 分組正則表達式&#xff0c;加小括號 url(r^test/(\d), views.test),def test(request,xx):print(xx)return HttpResponse("OK") 無名分組 將括號正則表達式匹配的內容&#xff0c;當作位置參數傳遞到后面的視圖函數 有名分組 正則表達式起一個別…

Django的第一步(第一節)

寫下你的第一個Django應用第一部分讓我們通過例子來學習.在本教程中&#xff0c;我們將引導您完成基本投票應用程序的創建.其中包括兩部分:一個讓人們查看民意調查并投票的公共網站.允許您添加&#xff0c;更改和刪除民意調查的管理網站.我們假設你django已經安裝好了,你可以通…

ad中電源插座怎么封裝_您可以在房屋中安裝的各種電源插座

ad中電源插座怎么封裝You may already know about smart outlets, or outlets with integrated USB ports. But you might be surprised at how many “normal” outlets you can actually buy for your house. They’re all built for different situations, and you want to …