【Spring Boot】Spring Boot——HelloWorld

Spring Boot——入門

spring boot簡化了spring的開發,是J2EE一站式解決方案。css

Spring Boot 的優缺點

優勢

  • 快速建立獨立運行的服務,與主流框架集成。
  • 使用嵌入式Serverlet容器,應用無需達成war包。
  • starters自動依賴與版本控制。
  • 大量的自動配置,簡化開發,支持自定義配置。
  • 無需xml配置,開箱即用。
  • 準生產環境的運行時應用監控。
  • 雲計算的自然集成。

缺點

入門容易,精通難;由於不少事情是spring boot自動完成的。html

微服務

martin flow 《Microservices》java

martin flow 《微服務》中文翻譯web

實例講解

Hello World

  • main函數所在的HelloWorld類
/**
     * @SpringBootApplication 用來告訴程序這是一個 spring boot 應用
     */
    @SpringBootApplication
    public class Helloworld {
        public static void main(String[] args) {
            // 啓動Spring應用
            SpringApplication.run(Helloworld.class, args);
        }
    }
  • controller類spring

    @Controller
    public class HelloController {
        @ResponseBody
        @RequestMapping("/hello")
        public String hello(){
            return "Hello world";
      }
    }

Pom文件

<!-- spring boot 全部spring boot starter的父項目
    是真正管理spring boot應用中全部依賴版本
    是spring boot的版本仲裁中心(決定依賴庫的版本)
    之後咱們導入依賴默認是不須要寫版本的(可是那些沒有在父項目中管理的依賴天然是須要聲明版本號的)-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>


    <dependencies>
        <!--開發web應用須要的庫-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!--將應用打包爲jar包-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

Spring Boot 主程序分析

/**
     * @SpringBootApplication 用來告訴程序這是一個 spring boot 應用
     */
    @SpringBootApplication
    public class Helloworld {
        public static void main(String[] args) {
            // 啓動Spring應用
            SpringApplication.run(Helloworld.class, args);
        }
    }

@SpringBootApplication 註解標註在某個類上的時候,說明這個類是SpringBoot的主配置類,SpringBoot就應該運行這個類的main方法來啓動SpringBoot應用。該註解爲組合註解,由如下註解組成:springboot

// 指定該註解能夠給一個類型進行註解,好比類、接口、枚舉
    @Target(ElementType.TYPE)
    // 註解能夠保留到程序運行的時候,它會被加載進入到 JVM 中,因此在程序運行時能夠獲取到它們。
    @Retention(RetentionPolicy.RUNTIME)
    // 它的做用是可以將註解中的元素包含到 Javadoc 中去。
    @Documented
    // 若是一個超類被 @Inherited 註解過的註解進行註解的話,那麼若是它的子類沒有被任何註解應用的話,那麼這個子類就繼承了超類的註解。
    @Inherited
    // 代表這個類是一個SpringBoot的配置類
    @SpringBootConfiguration
    // 告訴SpringBoot開啓自動配置功能,自動配置纔會生效
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {}

@SpringBootConfiguration 標記在某個類上時,代表這個類是一個SpringBoot的配置類。其組成爲:app

@Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Configuration
    public @interface SpringBootConfiguration {}

​ 其中,@Configuration註解是Spring框架中基本的一個註解,在配置類上標記該註解,代表這個類是Spring的配置類。框架

@EnableAutoConfiguration告訴SpringBoot開啓自動配置功能,這樣自動配置才能生效。其組成爲:jsp

@Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import(AutoConfigurationImportSelector.class)
    public @interface EnableAutoConfiguration {}

​ 其中 @AutoConfigurationPackage自動配置包,將主配置類(即@SpringBootApplication標註的類)所在包及其下面全部子包裏面的全部組件掃描到Spring容器中。其組成爲:maven

@Import(AutoConfigurationPackages.Registrar.class)
        public @interface AutoConfigurationPackage {}

@Import爲Spring的底層註解,代表給容器中導入一個組件,導入的組建由AutoConfigurationPackages.Registrar類提供。

@Import(AutoConfigurationImportSelector.class) 代表開啓自動導入哪些組建的選擇器;

​ AutoConfigurationImportSelector.class將要導入的組件以全類名的方式返回,這些容器會被導入到Spring容器。會給容器中導入很是多的自動配置類(通常以xxxAutoConfiguration結尾)。這些自動配置類的做用就是給容器中導入場景所需的自動配置,有了自動配置類,就能夠不用手動寫配置了

springboot01helloword

自動配置類是怎麼找到的呢?

AutoConfigurationImportSelector 
  - selectImports(AnnotationMetadata annotationMetadata) 
    - List<String> configurations = getCandidateConfigurations(annotationMetadata,
                    attributes); // 返回全部配置,對應上面的圖
      - List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
                getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
        - protected Class<?> getSpringFactoriesLoaderFactoryClass() {
        return EnableAutoConfiguration.class;
    }
            - String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
        - Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");

從類路徑下(如引用的各個jar包)的 META-INF/spring.factories中獲取 EnableAutoConfiguration制定的值(自動配置類),這些值做爲自動配置類導入到容器中,自動配置類就生效了,幫咱們進行自動配置工做。之前咱們須要本身配置的類,spring boot都自動配置了:

springboot01helloword1

spring-boot-autoconfigure包中,包含了J2EE 全部整合方案和全部自動配置。

org\springframework\boot\spring-boot-autoconfigure\1.5.9.RELEASE\spring-boot-autoconfigure-1.5.9.RELEASE.jar!\org\springframework\boot\autoconfigure

使用Spring Initializer快速建立Spring Boot項目

  • 首先,須要在IDEA中安裝 Spring Assisstant插件。
  • 選擇須要的模塊,IDEA會自動聯網下載Spring boot 應用模板:
  • resources 文件夾中目錄結構:

    • static:保存全部靜態資源,如js、css、images;
    • templates:保存全部的模板頁面;(Spring Boot默認jar包使用嵌入式的Tomcat,默認不支持jsp頁面);可使用模板引擎(freemarker,thymeleaf);
    • application.properties:Spring Boot 應用的配置文件,能夠修改一些默認設置,如服務的端口號。
相關文章
相關標籤/搜索