SpringBoot 02: 初識SpringBoot
- 2022 年 11 月 10 日
- 筆記
- springboot
1. SpringBoot
產生原因
-
spring, springmvc框架使用上的一些缺點:
-
需要使用的大量的配置文件
-
還需要配置各種對象
-
需要把使用的對象放入到spring容器中才能使用對象
-
需要了解其他框架配置規則
-
springboot的一些直觀優點:
-
SpringBoot就相當於簡化了配置文件的Spring+SpringMVC(但springboot的核心還是IOC容器)
-
常用的框架和第三方庫都已經配置好了, 只需要引入使用即可
特點
- Create stand-alone Spring applications
可以創建spring應用
- Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
內嵌的tomcat, jetty, Undertow
- Provide opinionated ‘starter’ dependencies to simplify your build configuration
提供了starter起步依賴, 簡化應用的配置:
比如使用MyBatis框架, 需要在Spring項目中, 需要配置MyBatis的對象, SqlSessionFactory以及Dao的代理對象
但在SpringBoot項目中, 只要在pom.xml裏面加入一個mybatis-spring-boot-starter依賴
- Automatically configure Spring and 3rd party libraries whenever possible
儘可能去自動配置spring和第三方庫, 叫做自動配置(就是把spring中的,第三方庫中的對象都創建好,放到容器中,開發人員可以直接使用)
- Provide production-ready features such as metrics, health checks, and externalized configuration
提供了健康檢查, 統計, 外部化配置
- Absolutely no code generation and no requirement for XML configuration
不用生成代碼,不需要使用xml文件做配置
2. SpringBoot項目
地址
-
創建springboot項目時,可能用到的地址
-
國外地址: //start.spring.io
-
國內地址: //start.springboot.io
@SpringBootApplication註解
- 位於項目啟動類上面,是複合註解, 包含以下注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
- 而@SpringBootConfiguration又是包含@Configuration的符合註解
@Configuration
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
//說明使用了@SpringBootConfiguration註解標註的類,可以作為配置文件使用的,可以使用Bean聲明對象,注入到容器
- @EnableAutoConfiguration
啟用自動配置,把java對象配置好,注入到spring容器中。例如可以把mybatis的對象創建好,放入到容器中
- @ComponentScan
掃描器,找到註解,根據註解的功能創建對象,給屬性賦值等等。默認掃描的包:@ComponentScan所在的類,以及其所在類所在的包和子包。
SpringBoot的配置文件
- 名稱:application
- 後綴:property(key=value) 或 yml(key:value)
- 配置文件示例:
- 例1:application.properties設置端口和上下文
#設置端口號
server.port=9090
#設置訪問應用上下文路徑,contextpath
server.servlet.context-path=/myboot
- 例2:application.yml,配置文件的結構更加清晰,推薦使用
server:
port: 9090
servlet:
context-path:/myboot
多環境配置文件
-
實際場景中,項目的配置會有開發環境,測試環境,上線的環境
-
每個環境有不同的配置信息,例如端口,上下文,數據庫url,用戶名,密碼等等
-
使用多環境配置文件,可以方便的切換不同的配置
-
使用方式:創建多個配置文件,名稱規則:application-環境名稱.properties(或者後綴未yml格式)
-
多環境配置文件的示例如下:
-
創建開發環境的配置文件:application-dev.properties(或者application-dev.yml )
-
創建測試者使用的配置:application-test.properties
-
springboot默認讀取application.properties文件,故需在該文件中配置實際需要讀取的核心配置文件
#以激活配置文件 application-dev.properties為例
spring.profiles.active=dev
@ConfigurationProperties
- 設計思想:把配置文件的數據映射到java對象的屬性上,將配置文件中某些開頭和prefix指定的值相同的對應配置文件中的值賦給對應屬性
- 例如:application.properties
#自定義key=value
school.name=橘子
school.website=www.test.com
school.address=黑龍江哈爾濱
- 則對應的實體類應該如下,其中name會被注入配置文件中的school.name的值,其他屬性類似
@Component
@ConfigurationProperties(prefix = "school")
public class SchoolInfo {
private String name;
private String website;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "SchoolInfo{" +
"name='" + name + '\'' +
", website='" + website + '\'' +
", address='" + address + '\'' +
'}';
}
}
使用jsp
- SpringBoot不推薦使用jsp, 而是使用模板技術代替jsp
- 如果要使用jsp, 需要添加如下依賴,負責編譯jsp文件
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
- 如果需要使用servlet, jsp, jstl的功能, 需要添加如下依賴
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
- 創建一個存放jsp的目錄, 一般為src/main/webapp目錄,記得設置webapp的目錄屬性
- 需要在pom.xml指定jsp文件編譯後的存放目錄:META-INF/resources
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource>
- 創建Controller, 訪問jsp
- 在application.propertis文件中配置視圖解析器
#配置視圖解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
手動使用SpringBoot容器獲取對象
- 關注SpringBoot工程的主啟動類的run方法
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 關註上述run方法的返回值
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return run(new Class[]{primarySource}, args);
}
- 而ConfigurableApplicationContext是ApplicationContext的子接口
public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {
}
- 所以接收SpringBoot主啟動類的run方法的返回值就可以獲取到SpringBoot容器
- 之後便可以按照需求調用SpringBoot容器的方法獲取已經註冊到容器中的對象
CommandLineRunner接口 與 ApplcationRunner接口
- 兩個接口
@FunctionalInterface
public interface CommandLineRunner {
void run(String... args) throws Exception;
}
@FunctionalInterface
public interface ApplicationRunner {
void run(ApplicationArguments args) throws Exception;
}
- 兩個接口都有一個run方法
- SpringBoot項目的主啟動類實現上述接口,重寫run方法,在容器對象創建好後自動執行run()方法
- 可以在容器對象創建好後完成一些自定義的操作