1. 程式人生 > >【Spring Boot課程】2.HelloWorld應用程式

【Spring Boot課程】2.HelloWorld應用程式

HelloWorld應用程式

  1. 給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. 在maven中新增sprig boot相關依賴
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId
>
org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
  1. 編寫一個主程式,啟動spring boot應用
package com.zhaoyi.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {
    public static void main(String[] args){
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

程式探究

1、POM檔案

1 父專案

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>]

父專案才真正的管理Spring Boot應用裡面的所有依賴版本。

Spring boot的版本仲裁中心:
以後我們匯入依賴預設是不需要寫版本(沒有在dependency裡面管理的依賴自然需要宣告版本號)

2、匯入的依賴

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

1、啟動器

spring-boot-starter: spring-boot場景啟動器;如spring-boot-starter-web則幫我們匯入了web模組需要正常執行所依賴的元件。
參照官方文件我們可以發現,spring-boot-starter-*代表了一系列的功能場景,當你需要什麼具體業務需求的時候,將其匯入就可以了,比如aop、data-redis、mail、web等。他將所有的功能場景都抽出來,做成一個個的starter(啟動器),其先關的業務場景的所有依賴都會匯入進來,要用什麼功能就匯入什麼場景的啟動器。

2、主程式類

package com.zhaoyi.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {
    public static void main(String[] args){
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

@SpringBootApplication SB應用標註在某個類上說明這個類是SB的主配置類,SB就應該執行這個類的main方法來啟動SB應用。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {

@SpringBootConfiguration SB的配置類;
標註在某個類上,表示這個類是SB的配置類。

@Configuration 配置類上來標註這個註解;
配置類就是配置檔案;配置類也是容器中的一個元件;@companent

@EnableAutoConfiguration 開啟自動配置功能;
以前我們需要在SP中配置的東西,SB幫我們自動配置,通過此配置告訴SB開啟自動配置功能。這樣,自動配置的功能才能生效。


@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

@AutoConfigurationPackage 自動配置包
SP的底層註解@import,給容器中匯入一個元件。
將主配置類(@SpringBottApplication標註的類)所在包及下面所有子包裡面的所有元件掃描到SP容器。

@Import({EnableAutoConfigurationImportSelector.class}) 匯入哪些元件的選擇器;將所有需要匯入的元件以全類名的方式返回,這些元件就會被新增到容器中;
會給容器中匯入非常多的自動配置類(xxxAutoConfiguration);就是給容器中匯入這個場景需要的所有元件,並配置好這些元件。這樣就免去了我們手動編寫配置注入功能元件等的工作;

SB在啟動的時候從類路徑下的META-INFO/spring.factories中獲取EnableAutoConfiguration指定的值,將這些紙作為自動配置類匯入容器中,自動配置類就生效,幫我們進行自動配置工作;以前我們需要自己配置的東西,自動配置類都幫我們做了。

J2EE的整體解決方案和自動配置都在sprig-boot-autoconfigure.jar中了;

使用Spring Initializer快速建立SB專案

IDE都支援使用Spring的專案建立嚮導;
選擇我們需要的模組,嚮導會聯網建立SB專案;

@ResponseBody 這個類的所有方法(或者單個方法——)返回的資料直接寫給瀏覽器。
@ResponseBody寫在類上面時,大可以寫為@RestController,其等價於@[email protected];

預設生成的專案

  • 主程式已經生成好了,我們只需關注自己的業務邏輯
  • resounces資料夾中的目錄結構
    • static:儲存所有的靜態資源:js css images;
    • templates:儲存所有的模板頁面;(SB預設jar包,使用嵌入式頁面;可以使用模板引擎——freemarker、thymeleaf)
    • application.properties SB應用的配置檔案;SB的一些預設配置可以在這裡進行修改。