如何對(duì)spring框架的搭建進(jìn)行封裝--springboot
一.回顧spring
優(yōu)點(diǎn)
開(kāi)源,輕量級(jí),非侵入式的一站式框架,簡(jiǎn)化企業(yè)級(jí)應(yīng)用開(kāi)發(fā)??刂品崔D(zhuǎn)(IOC),依賴注入(DI)降低了組件之間的耦合性,實(shí)現(xiàn)了軟件各層之間 的解耦。
面向切面(AOP),利用它可以很容易實(shí)現(xiàn)一些攔截,如事務(wù)控制等。
spring 對(duì)于主流的應(yīng)用框架提供了很好的支持,例如 mybatis。
spring 提供有自己的 mvc 實(shí)現(xiàn)。
缺點(diǎn)
雖然 spring 的組件代碼是輕量級(jí)的,但它的配置卻是重量級(jí)的。雖然 spring引入了注解功能,但是仍然需要編寫(xiě)大量的模板化配置文件.項(xiàng)目的依賴管理也是一件耗時(shí)耗力的事情,在環(huán)境搭建時(shí),需要分析要導(dǎo)入大量庫(kù)的坐標(biāo),而且還需要分析導(dǎo)入與之有依賴關(guān),一旦選錯(cuò)依賴的版本,隨之而來(lái)的不兼容問(wèn)題就會(huì)嚴(yán)重阻礙項(xiàng)目的開(kāi)發(fā)進(jìn)度。
Spring Boot 對(duì)上述 spring 的缺點(diǎn)進(jìn)行的改善和優(yōu)化,基于約定優(yōu)于配置的思想.
可以讓開(kāi)發(fā)人員不必在配置與邏輯業(yè)務(wù)之間進(jìn)行思維的切換,全身心的投入到邏輯業(yè)務(wù)的代碼編寫(xiě)中,從而大大提高了開(kāi)發(fā)的效率,一定程度上縮短了項(xiàng)目周期。
二.springboot概述
Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的在 spring 框架基礎(chǔ)之上開(kāi)發(fā)的框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。
Spirng Boot 本身并不提供 Spring 框架的核心特性以及擴(kuò)展功能,只是用于快速、敏捷地開(kāi)發(fā)新一代基于 Spring 框架的應(yīng)用程序。也就是說(shuō),它并不是用來(lái)替代 Spring 的解決方案,而是和 Spring 框架緊密結(jié)合用于提升 Spring 開(kāi)發(fā)者體驗(yàn)的工具.Spring Boot 以約定大于配置的核心思想,從而使開(kāi)發(fā)人員不再需要定義樣板化的配置。它集成了大量常用的第三方庫(kù)配置(例如 Redis,Jpa RabbitMQ,Quartz 等等),Spring Boot 應(yīng)用中這些第三方庫(kù)幾乎可以零配置的開(kāi)箱即用。
通過(guò)這種方式,Spring Boot 致力于在蓬勃發(fā)展的快速應(yīng)用開(kāi)發(fā)領(lǐng)域成為領(lǐng)導(dǎo)者。
在Spring Boot 只需要“run”就可以非常輕易的構(gòu)建獨(dú)立的、企業(yè)級(jí)別的spring 應(yīng)用。
三.springboot的特點(diǎn)
創(chuàng)建獨(dú)立的 spring 應(yīng)用程序直接內(nèi)嵌 tomcat、jetty 和 undertow 提供了固定化的“starter”配置
以簡(jiǎn)化構(gòu)建配置盡可能的自動(dòng)配置 spring 和第三方庫(kù)提供產(chǎn)品級(jí)的功能,如:安全指標(biāo)、運(yùn)行狀況監(jiān)測(cè)和外部化配置等絕對(duì)不會(huì)生成代碼,并且不需要 XML 配置。
springboot的核心功能:
起步依賴
起步依賴就是將具備某種功能的坐標(biāo)打包到一起,并提供一些默認(rèn)的功能。
自動(dòng)配置
Spring Boot 的自動(dòng)配置是一個(gè)運(yùn)行時(shí)(更準(zhǔn)確地說(shuō),是應(yīng)用程序啟動(dòng)時(shí))的過(guò)程,考慮了眾多因素,才決定 Spring 配置應(yīng)該用哪個(gè),不該用哪個(gè)。該過(guò)程是 Spring 自動(dòng)完成的。
四.springboot環(huán)境搭建
創(chuàng)建一個(gè)普通的maven項(xiàng)目。
在pom.xml中配置下面信息:
<!--依賴的父級(jí)工程--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.6</version> <relativePath/> </parent>
<!--指定 jdk 版本--> <properties> <java.version>1.8</java.version> </properties>
<!--添加基本的 springweb 依賴--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <!--打包插件--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.6.6</version> </plugin> </plugins> </build>
springboot中內(nèi)置了服務(wù)器,所以不需要像以前一樣將項(xiàng)目部署到tomcat服務(wù)器中,只需要?jiǎng)?chuàng)建一個(gè)啟動(dòng)類:
創(chuàng)建啟動(dòng)類之后,就不需要啟動(dòng)服務(wù)器,直接啟動(dòng)此類即可。、
啟動(dòng)后如下:
拓展:?jiǎn)?dòng)時(shí)的logo可以自行切換,只需要在resources文件夾下,創(chuàng)建一個(gè)banner.txt就可以實(shí)現(xiàn)啟動(dòng)logo的切換了。(在線生成啟動(dòng)logo的網(wǎng)址:https://www.bootschool.net/ascii-art)
五.springboot配置文件
Spring Boot 使用一個(gè)全局的配置文件( 配置文件名是固定的,必須為 application),用來(lái)存儲(chǔ)項(xiàng)目中需要用到的各種配置參數(shù).配置文件格式有兩種,一種為 properties 格式,一種 yaml 格式.
1.application.properties
屬性文件格式,內(nèi)容為鍵值對(duì)。eg:
server.port=8080 (鍵=值)
2.application.yml
yml 是 YAML(YAML Ain’t Markup Language)語(yǔ)言的文件,以數(shù)據(jù)為中心。eg:
server: (空格)port:(空格)8080(空格必須存在,格式要求)
yaml的基本語(yǔ)法:
語(yǔ)法結(jié)構(gòu):key:空格 value;
- 以此來(lái)表示一對(duì)鍵值對(duì)(空格不能省略);
- 以空格的縮進(jìn)來(lái)控制層級(jí)關(guān)系,只要是左邊對(duì)齊的一列數(shù)據(jù)都是同一個(gè)層級(jí)的;
- 字面量直接寫(xiě)在后面就可以,字符串默認(rèn)不用加上雙引號(hào)或者單引號(hào);
- 以#作為注釋符號(hào).
eg:
user: name: zhangsan age: 20
使用@Value 注解標(biāo)簽將配置文件中的內(nèi)容映射到類中的屬性.
@Value("${user.name}")
六.springboot數(shù)據(jù)訪問(wèn)管理
數(shù)據(jù)源配置:
首先,為了連接數(shù)據(jù)庫(kù)需要引入 jdbc 支持,在 pom.xml 中引入如下配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
使用mysql數(shù)據(jù)庫(kù)還需要添加mysql依賴:
<!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency>
添加數(shù)據(jù)源之后,為了和數(shù)據(jù)庫(kù)連接,我們還需要在 application.yml 中去配置信息:
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/數(shù)據(jù)庫(kù)名?serverTimezone=Asia/Shanghai username: 用戶名 password: 用戶密碼 driver-class-name: com.mysql.cj.jdbc.Driver
springboot整合阿里數(shù)據(jù)源:
首先需要導(dǎo)入阿里數(shù)據(jù)源的 .jar 包:
<!-- 阿里數(shù)據(jù)源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>
在 application.yml 中去配置信息:
//他們和url,username,password在一個(gè)層級(jí)中 type: com.alibaba.druid.pool.DruidDataSource initialSize: 5 #初始化時(shí)建立物理連接的個(gè)數(shù) maxActive: 20 #最大連接池?cái)?shù)量
七.springboot注解
springboot 實(shí)現(xiàn)自動(dòng)裝配的核心仍然是使用注解標(biāo)簽
@SpringBootApplication 是 springboot 核心注解,使用在啟動(dòng)類前。
其中包含 @SpringBootConfiguration,@EnableAutoConfiguration, @ComponentScan.
@Configuration 一般使用在攔截器的前面。
加入@Configuration 注解,表明這就是一個(gè)配置類。有一個(gè) myBean()的方法并用@Bean 進(jìn)行注釋,返回一個(gè) MyBean()的實(shí)例,表明這個(gè)方法是需要被Spring 進(jìn)行管理的 bean。@Bean 如果不指定名稱的話,默認(rèn)使用 myBean 名稱,也就是小寫(xiě)的名稱。
@Bean
相當(dāng)于 XML 中的<bean></bean>,放在方法的上面,而不是類,意思是產(chǎn)生一個(gè) bean,并交給 spring 管理。eg:(類似于之前寫(xiě)過(guò)的跨域問(wèn)題)
package com.zyk.news.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; import java.util.Collections; @Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration corsConfiguration = new CorsConfiguration(); //1,允許任何來(lái)源 corsConfiguration.setAllowedOriginPatterns(Collections.singletonList("*")); //2,允許任何請(qǐng)求頭 corsConfiguration.addAllowedHeader(CorsConfiguration.ALL); //3,允許任何方法 corsConfiguration.addAllowedMethod(CorsConfiguration.ALL); //4,允許憑證 corsConfiguration.setAllowCredentials(true); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(source); } }
八.springboot集成mybatis
首先在 pom.xml 文件中導(dǎo)入依賴的 jar 包:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
下面在 application.yml 中配置信息:
mybatis: type-aliases-package: com.zyk.news.model //模型類地址 mapper-locations: classpath:mappers/*Mapper.xml configuration: map-underscore-to-camel-case: true cache-enabled: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
最后還需要在啟動(dòng)類前加上 @MapperScan("接口所在的包地址") 注解。eg:
九.springboot全局異常捕獲與處理
Springboot 對(duì)于異常的處理也做了不錯(cuò)的支持 ,它提供了一個(gè) @RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用來(lái)開(kāi)啟全局的異常捕獲,后者則是說(shuō)明捕獲哪些異常,對(duì)那些異常進(jìn)行處理。
eg:
@RestControllerAdvice public class GlobalExceptionHandler { /** * 異常處理 */ @ExceptionHandler(Exception.class) public CommonResult globalException(Exception e) { CommonResult commonResult = new CommonResult(500,e.getMessage()); return commonResult; } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入了解Java SpringBoot自動(dòng)裝配原理
在使用springboot時(shí),很多配置我們都沒(méi)有做,都是springboot在幫我們完成,這很大一部分歸功于springboot自動(dòng)裝配。本文將詳細(xì)為大家講解SpringBoot的自動(dòng)裝配原理,需要的可以參考一下2022-03-03java實(shí)現(xiàn)將文件上傳到ftp服務(wù)器的方法
這篇文章主要介紹了java實(shí)現(xiàn)將文件上傳到ftp服務(wù)器的方法,結(jié)合實(shí)例形式分析了基于java實(shí)現(xiàn)的ftp文件傳輸類定義與使用方法,需要的朋友可以參考下2016-08-08Java零基礎(chǔ)教程之Windows下安裝、啟動(dòng)Tomcat服務(wù)器方法圖解(免安裝版)
這篇文章主要介紹了Windows系統(tǒng)下安裝、啟動(dòng)、注冊(cè)服務(wù)、停止 Tomcat操作的所有方法,本文通過(guò)圖文并茂的方式給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2016-09-09spring中BeanPostProcessor的作用和使用注意事項(xiàng)
在Spring框架中,BeanPostProcessor?是一個(gè)核心擴(kuò)展接口,允許你在Bean實(shí)例化的過(guò)程中插入自定義邏輯,本文給大家介紹spring中BeanPostProcessor的作用,感興趣的朋友一起看看吧2025-04-04Java中sleep()與wait()的區(qū)別總結(jié)
因?yàn)樽罱鼘W(xué)習(xí)時(shí)正好碰到這兩個(gè)方法,就查閱相關(guān)資料,并通過(guò)程序?qū)崿F(xiàn),進(jìn)行區(qū)別總結(jié)一下,所以下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java中sleep()與wait()區(qū)別的相關(guān)資料,需要的朋友可以參考,下面來(lái)一起看看吧。2017-05-05Java使用Condition實(shí)現(xiàn)精準(zhǔn)喚醒線程詳解
這篇文章主要為大家詳細(xì)介紹了Java如何使用Condition實(shí)現(xiàn)精準(zhǔn)喚醒線程效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-02-02springmvc處理模型數(shù)據(jù)ModelAndView過(guò)程詳解
這篇文章主要介紹了springmvc處理模型數(shù)據(jù)ModelAndView過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01200行Java代碼如何實(shí)現(xiàn)依賴注入框架詳解
依賴注入對(duì)大家來(lái)說(shuō)應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于利用200行Java代碼如何實(shí)現(xiàn)依賴注入框架的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05