Spring Boot
的使命
Spring
已經成為Java
應用程式開發框架的事實標準。它是J2EE
的輕量級替代品,通過依賴注入和面向切面程式設計,用簡單的Java
物件(POJO
)實現了EJB
功能。雖然Spring
的元件程式碼是輕量級的,但它的配置卻是重量級的,即使Spring2.5
引入了基於註解的元件掃描、Spring3.0
引入了基於Java
的配置,但是配置仍然是一項艱鉅的任務。另外,專案的依賴管理也是一件費力不討好並且隨之而來的不相容問題也是生產力殺手。
以上提到的Spring
開發中遇到的問題成為了Spring Boot
的使命。
Spring Boot
的核心特性
- 自動配置 : 針對很多
Spring
應用程式常見的應用功能,Spring Boot
能自動提供相關配置 - 起步依賴 : 告訴
Spring Boot
需要什麼功能,它就能引入需要的庫 - 命令列介面 : 這是
Spring Boot
的可選特性,藉此你只需寫程式碼就能完成完整的應用程式, 無需傳統專案構建 - Actuator : 讓你能夠深入執行中的
Spring Boot
應用程式,一探究竟
快速建立應用(命令列方式)
1. Spring cli
安裝
只需從官網下載,解壓,並且配置path即可。
2. 建立專案
使用spring init -dweb,data-jpa,h2,thymeleaf --build gradle readinglist
命令,其中-d
是-denpendency
的縮寫即指定所需依賴,--build
指定構建方式是maven
還是gradle
,最後指定應用名字在 項 目 創 建 完 畢 之 後 , 你 可 以 打 開 項 目 ,把
DemoApplication.java
改名為ReadingListApplication.java
初探Spring Boot
初始應用
配置和啟動引導類
ReadingListApplication
是應用的配置和引導類。
package readinglist;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//以下三個註解的組合:
//@Configuration(標明使用基於Java的配置)
//@ComponentScan(啟用元件掃描)
//@EnableAutoConfiguration(開啟Spring Boot自動配置)
public class ReadingListApplication {
public static void main(String[] args) {
SpringApplication.run(ReadingListApplication.class, args);
}
}
複製程式碼
補充:非web型別啟動
import org.springframework.boot.CommandLineRunner;
@SpringBootApplication
public class SpringBootConsoleApplication implements CommandLineRunner {
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringBootConsoleApplication.class, args);
}
//access command line arguments
@Override
public void run(String... args) throws Exception {
//do something
}
}
複製程式碼
Spring Boot
自動配置的魔法
Spring Boot
自動配置的功能由名為spring-boot-autoconfigure
的jar包提供,其核心技術就是使用了從Spring4.0
開始提供的條件化配置功能,條件化配置允許配置存在於應用程式中,但在滿足某些特定條件之前都忽略這個配置。
定義條件:
package readinglist;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class JdbcTemplateCondition implements Condition {
@Override
public boolean matches(ConditionContext context,
AnnotatedTypeMetadata metadata) {
try {
context.getClassLoader().loadClass(
"org.springframework.jdbc.core.JdbcTemplate");
return true;
} catch (Exception e) {
return false;
}
}
}
複製程式碼
使用條件:
@Conditional(JdbcTemplateCondition.class)
public MyService myService() {
...
}
複製程式碼