spring boot實戰讀書筆記(1)

willcat發表於2019-02-12

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() {
    ...
}
複製程式碼

相關文章