廣汽與中車時代合作,佈局新能源汽車核心半導體研發生產
1、SpringBoot簡介
Spring Boot(英文中是“引導”的意思),是用來簡化Spring應用的搭建到開發的過程。應用開箱即用,只要通過 “just run”(可能是 java -jar 或 tomcat 或 maven外掛run 或 shell指令碼),就可以啟動專案。
-
簡化了j2ee開發
-
整合了spring技術棧(springmvc springweb)
-
整合了 mybatis等
Spring Boot將各個第三方框架 設定成一個個場景 Starter,會將場景所依賴的所有依賴自動載入注入。例如:選擇Web,會把tomcat\json\web-mvc\web 自動注入
父專案中匯入SpringBoot-starter,其中包括2.5版本對應的所有相關依賴包及版本號
1.1 依賴管理
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/>
</parent>
1、引入依賴預設都可以不寫版本
2、引入非版本仲裁的jar,要寫版本號
可以通過porm.xml中增加配置自定義版本號
1、檢視spring-boot-dependencies裡面規定當前依賴的版本 用的 key。
2、在當前專案裡面重寫配置
<properties>
<mybatis-plus.version>3.4.1</mybatis-plus.version>
</properties>
1.2 自動配置
- 自動配置好SpringMVC
- 自動引入SpringMC所有元件
- 自動配置好SpringMVC常用元件
- 自動配置好Web常用元件
- 配置好了常用元件(例如:字符集等)
- 預設的包結構
- 主程式所在包及其結構下方所有自包都會預設掃描載入
- 想要改變掃描包可以通過以下兩種註解方式變更
1) @SpringBootApplication(scanBasePackages = "com.capinfo") 2) @ComponentScan(basePackages = "com.capinfo")
- 各種預設配置值
- 預設配置最終都對映到對應的配置類中,例如:ServerProperties,MutiPartProperties
- 配置檔案的值最終會繫結到配置類上,這個類在容器中建立物件
- 按需載入所有配置項
- 所有的配置都在spring-boot-autoconfigure中##**
- 引入了哪個場景才會載入相關配置項(Prom中引入Starter例如Starter-WEB)
- 按照條件裝配規則,符合的才會裝備,@ConditionalOnClass(Advice.class)
1.3 自動配置原理
Springboot主配置類,實際會載入一套配置,三個配置項:
-
1)@SpringBootConfiguration:
包含@Configuration:加了此註解的類為配置配置類,會自動納入Spring容器(註解@Component、@Service等) -
2)@EnableAutoConfiguration:**
實現自動配置,主要為其中的以下兩個註解- @AutoConfigurationPackage
@Import(AutoConfigurationPackages.Registrar.class)//給容器中匯入Registrar元件 //Registrar中給容器中匯入一系列元件 //將Main中配置的包中所有元件匯入 @Override public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { register(registry, new PackageImports(metadata).getPackageNames().toArray(new String[0])); }
- @Import(AutoConfigurationImportSelector.class)
@Override public String[] selectImports(AnnotationMetadata annotationMetadata) { if (!isEnabled(annotationMetadata)) { return NO_IMPORTS; } AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata);//載入所有元件入口 return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations()); }
具體內部實現順序
1、getAutoConfigurationEntry(annotationMetadata);給容器中載入元件
2、Listconfigurations = getCandidateConfigurations(annotationMetadata, attributes);獲取所有需要匯入的包
3、Map<String, List> loadSpringFactories(ClassLoader classLoader) {
getBeanClassLoader());//工廠載入
4、可以查詢到最終是從中META-INF/spring.factories中載入
- 預設掃描當前系統中所有依賴包中META-INF/spring.factories檔案
- org.springframework.boot.autoconfigure:2.5.0中EnableAutoConfiguration為spring所有配置包 -
3)@ComponentScan: 指定要掃描哪些包
SpringBoot實踐
1、引入依賴
引入場景依賴org.springframework.boot
[官方文件](https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.
2、檢視自動配置
自己分析,引入場景對應的自動配置一般都生效了
配置檔案debug=true,可看到開啟配置報告Negative(未生效)、Positive(生效)
xxxxProperties綁定了配置檔案的哪些。
自定義加入或者替換元件
@Bean、@Component…
自定義器 XXXXXCustomizer;
3、是否需要修改
參照官方文件配置 配置官方文件build-systems.starters)
自定義加入或者替換元件
4、自定義元件
1)Lombok
Lombok用標籤方式代替構造器、getter/setter、toString()等雞肋程式碼。
簡化javabean開發,會在編譯時生成相關程式碼,保持程式碼整潔
1)引入依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2)安裝lombok外掛
IDEA中File->Settings->Plugins,搜尋安裝Lombok外掛。
3)註解
@AllArgsConstructor //生成有參建構函式
@NoArgsConstructor //生成無參建構函式
@Data //生成get,set方法
@ToString //生成ToString方法
@Slf4j //注入日誌 log.info直接使用
2) dev-tools 自動載入功能
1)引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
2)程式碼變更後只需要Build就可以看到結果,相當於重新啟動專案,靜態頁面開發時不重啟就能看到效果了
3) 配置提示
自定義的類和配置檔案繫結一般沒有提示。新增此依賴增加提示
//依賴關係配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4) 打包配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>