springboot系列文章(一)springboot概念

springboot:
            Spring Boot是他们最新的创新,能够跟上不断变化的技术需求。 开发Spring Boot的主要动机是简化配置和部署spring应用程序的过程。
            Spring Boot为开发提供一个具有最小功能的Spring应用程序,并提供了一个新的范例。
            使用Spring Boot将能够以更灵活的方式开发Spring应用程序,并且能够通过最小(或可能没有)配置Spring来专注于解决应用程序的功能需求。它使用全新的开发模型,通过避免一些繁琐的开发步骤和样板代码和配置,使Java开发非常容易。
        Spring Boot的主要特点

  •                 创建独立的Spring应用程序
  •                 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
  •                 提供“初始”的POM文件内容,以简化Maven配置
  •                 尽可能时自动配置Spring
  •                 提供生产就绪的功能,如指标,健康检查和外部化配置
  •                 绝对无代码生成,也不需要XML配置

        设置springBoot的banner: 我们在 src/main/resources 目录下新建一个 banner.txt
                    ${AnsiColor.BRIGHT_RED}:设置控制台中输出内容的颜色
                    ${application.version}:用来获取 MANIFEST.MF 文件中的版本号
                    ${application.formatted-version}:格式化后的 ${application.version} 版本信息
                    ${spring-boot.version}:Spring Boot 的版本号
                    ${spring-boot.formatted-version}:格式化后的 ${spring-boot.version} 版本信息
        springboot的核心还是spring,他不是编写应用程序的框架,他是提供应用程序服务器功能的嵌入式servlert容器。

构建第一个SpringBoot程序:

1、MAVEN设置;

给maven 的settings.xml配置文件的profiles标签添加


  jdk-1.8
  
    true
    1.8
  
  
    1.8
    1.8
    1.8
  

2、IDEA设置

整合maven进来;

springboot系列文章(一)springboot概念_第1张图片

 

Spring Boot HelloWorld

一个功能:

浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串;

 

1、创建一个maven工程;(jar)

2、导入spring boot相关的依赖

   
 
        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
    

3、编写一个主程序;启动Spring Boot应用

/**
 *  @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {
​
    public static void main(String[] args) {
​
        // Spring应用启动起来
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

4、编写相关的Controller、Service

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

5、运行主程序测试

6、简化部署

 
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

将这个应用打成jar包,直接使用java -jar的命令进行执行;

Hello World探究

1、POM文件

1、父项目


    org.springframework.boot
    spring-boot-starter-parent
    1.5.9.RELEASE

​
他的父项目是

  org.springframework.boot
  spring-boot-dependencies
  1.5.9.RELEASE
  ../../spring-boot-dependencies

他来真正管理Spring Boot应用里面的所有依赖版本;
​

Spring Boot的版本仲裁中心;

以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)

2、启动器


    org.springframework.boot
    spring-boot-starter-web

spring-boot-starter-==web==:

spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;

 

Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

 

主程序类,主入口类

/**
 *  @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {
​
    public static void main(String[] args) {
​
        // Spring应用启动起来
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

 

@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:Spring Boot的配置类;

标注在某个类上,表示这是一个Spring Boot的配置类;

@Configuration:配置类上来标注这个注解;

配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component

 

@EnableAutoConfiguration:开启自动配置功能;

以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包

@Import(AutoConfigurationPackages.Registrar.class):

Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;

==将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;==

@Import(EnableAutoConfigurationImportSelector.class);

给容器中导入组件?

EnableAutoConfigurationImportSelector:导入哪些组件的选择器;

将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;

会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;

SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);

 

==Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;==以前我们需要自己配置的东西,自动配置类都帮我们;

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar;

 

使用Spring Initializer快速创建Spring Boot项目

IDEA:使用 Spring Initializer快速创建项目

IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;

选择我们需要的模块;向导会联网创建Spring Boot项目;

默认生成的Spring Boot项目;

  • 主程序已经生成好了,我们只需要我们自己的逻辑

  • resources文件夹中目录结构

    • static:保存所有的静态资源; js css images;

    • templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);

    • application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;

到这里基本的springboot项目就创建好了下面看下完整的源码:

完整的代码结构:

springboot系列文章(一)springboot概念_第2张图片

pom.xml



    4.0.0

    com.kayleoi
    spring-boot-helloword
    0.0.1-SNAPSHOT

    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
    
    
        UTF-8
        UTF-8
        1.8
    
    
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

controller层:

package com.kayeoi.spring.boot.test.controller;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Author kay三石
 * @date:2019/6/29
 */
@Controller
public class HelloSpringBootController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "hello spring boot!";
    }
}

启动类:启动类必须放在根目录下,即包的最顶层目录

package com.kayeoi.spring.boot.test;

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

/**
 * @Author kay三石
 * @date:2019/6/29
 */
@SpringBootApplication
public class SpringBootIApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootIApplication.class,args);
    }
}

下一篇会进行说明各个配置的使用形式

你可能感兴趣的:(框架,springboot)