Spring Boot 基礎篇
1.1Spring Boot 簡介
Spring Boot 是所有基于 Spring 開發的專案的起點。SpringBoot其實不是什么新的框架,它默認配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了很多的技術,提供 了JavaEE的大整合。
1.1.1springboot的學習鋪墊和要求
1.對spring的IOC有深入的理解,springboot是基于spring的。
2.深入掌握spring的注解開發。傳統老程式員對注解認識偏少。
3.最好有ssm專案的開發經驗,因為springboot是整合了javaEE的技術。
4.有較好的原始碼學習經驗。
5.有idea和eclipse的使用經驗,本次課程使用idea。
6.在國內IT公司是一個主要的招聘要求。
1.1.2、SpringBoot主要特性
spring官方的網站:https://spring.io/
1、SpringBoot Starter:他將常用的依賴分組進行了整合,將其合并到一個依賴中,這樣就可以一次性添加到專案的Maven或Gradle構建中;
2、使編碼變得簡單,SpringBoot采用 JavaConfig的方式對Spring進行配置,并且提供了大量的注解,極大的提高了作業效率。
3、自動配置:SpringBoot的自動配置特性利用了Spring對條件化配置的支持,合理地推測應用所需的bean并自動化配置他們;
4、使部署變得簡單,SpringBoot內置了三種Servlet容器,Tomcat,Jetty,undertow.我們只需要一個Java的運行環境就可以跑SpringBoot的專案了,SpringBoot的專案可以打成一個jar包。
5、現在流行微服務與分布式系統,springboot就是一個非常好的微服務開發框架,你可以使用它快速的搭建起一個系統。同時,你也可以使用spring cloud(Spring Cloud是一個基于Spring Boot實作的云應用開發工具)來搭建一個分布式的架構。

1.1.3springboot缺點
1.將現有或傳統的Spring Framework專案轉換為Spring Boot應用程式是一個非常困難和耗時的程序。它僅適用于全新Spring專案。
2.使用簡單,學習成本高,精通難。
1.2環境準備
jdk1.8:Spring Boot 推薦jdk1.8及以上;
maven3.x:maven 3.3以上版本;
IntelliJIDEA2019,不要使用2017
SpringBoot 2.3.0.RELEASE
Day 1
1.2.1MAVEN設定
1.配置阿里云鏡像
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
2.給maven 的settings.xml組態檔的profiles標簽添加
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
1.2.2IDEA設定
1.指定jdk環境


2.指定maven環境


1.3Spring Boot HelloWorld
1.3.1創建一個maven父工程tx_sboot(pom)

pom.xml
<?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>cn.tx.springboot</groupId>
<artifactId>tx_sboot</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
1.3.2在父工程下創建springboot-first(jar)

1.3.3創建測驗Controller
@RestController
public class TestController {
@RequestMapping("hello")
public String hello(){
return "hello";
}
}
1.3.4創建一個springboot啟動類
@SpringBootApplication
public class FirstSpringApplication {
public static void main(String[] args) {
SpringApplication.run(FirstSpringApplication.class, args);
}
}
啟動并且測驗:http://localhost:8080/hello
成功。
1.3.5在父工程tx_sboot中加入構建依賴
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
我們可以把springboot工程打成可執行的jar
mvn -f springboot-first clean package
打完jar包后,我們切入到對應的jar包里面執行

1.3.6第一個例子做完的疑問。
1.starter是什么?我們何如去使用這些starter?
2.Tomcat的內嵌是如何完成
3.使用了web對應的starter,springmvc是如何自動裝配?
4.我們如何來配置我們自定義話的相關內容。
1.4 默認掃描器basepackage
springboot的主啟動類所在的package就是掃描器的basepackage
如圖所示com.example.myapplication就是我們的掃描器中basepackge
com
+- example
+- myapplication
+- Application.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
原始碼決議
@AutoConfigurationPackage
自動配置包負責basepackge的注冊
@AutoConfigurationPackage內部使用@Import來做bean的定義的注冊

讓我們進入AutoConfigurationPackages.Registrar,通過register的呼叫來注冊basepackage的bean定義的

進入到PackageImports,獲得basepackge設定給packageNames

回到上一層進入到register,創建bean的定義并且把packageNames設定給bean定義
然后把bean定義的做注冊。

1.5 自動配置淺析
springboot掃描當前classpath下所有的jar包,篩選出來EnableAutoConfiguration下的所有自動配置類注入到spring容器中,完成自動的bean的配置。

2熱部署
在實際開發程序中,每次修改代碼就得將專案重啟,重新部署,對于一些大型應用來說,重啟時間需要花費大量的時間成本。對于一個后端開發者來說,重啟程序確實很難受啊。在 Java 開發領域,熱部署一直是一個難以解決的問題,目前的 Java 虛擬機只能實作方法體的修改熱部署,對于整個類的結構修改,仍然需要重啟虛擬機,對類重新加載才能完成更新操作。下面我們就看看對于簡單的類修改的熱部署怎么實作。
2.1原理
深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另一個ClassLoader加載會更改的類,稱為restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,重新創建一個restart ClassLoader,由于需要加載的類相比較少,所以實作了較快的重啟時間。
2.2devtools工具包
devtools會監聽classpath下的檔案變動,并且會立即重啟應用(發生在保存時機),
java類檔案熱部署(類檔案修改后不會立即生效),實作對屬性檔案的熱部署。
devtools可以實作頁面熱部署(頁面修改后會立即生效,這個可以直接在application.properties檔案中配置spring.thymeleaf.cache=false來實作,后面講到)。
2.3idea的工具設定
當我們修改了類檔案后,idea不會自動編譯,需要通過ctrl+F9來觸發,
如果想要自動生效得修改idea設定,該功能按著個人的喜好來設定,修改類后,當我們視窗切換時候可以看到熱部署的發生
(1)File-Settings-Compiler-Build Project automatically
(2)ctrl + shift + alt + / ,選擇Registry,勾上 Compiler autoMake allow when app running


2.4 熱部署的排除
默認情況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些檔案夾下的檔案修改不會使應用重啟,但是會重新加載(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器重繪)。
1.我們在resources/static目錄下創建tx.js檔案每次發生修改后的并不重啟,而是采用livereload的方式。
2.同時我們可以根據自己的意愿來設定想要排除的資源
spring.devtools.restart.exclude=static/**,public/**
后續會更新...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/159537.html
標籤:Java EE
上一篇:jsp空指標問題,求大神
