SpringBoot01

简介

背景

  1. J2EE笨重的开发, 繁多的配置, 低下的开发效率, 复杂的部署流程, 第三方技术集成难度大.
  2. SpringBoot来简化Spring的应用开发, 是整个Spring技术的一个大整合, J2EE开发的一站式解决方案.
  3. SpringBoot的优点
    1. 快速创建独立运行的Spring项目以及主流框架集成.
    2. 使用嵌入式的Servlet容器, 应用无需达成war包, jar包即可.
    3. starters自动依赖与版本控制.
    4. 大量的自动配置, 简化开发, 也可修改默认值.
    5. 无需配置xml, 无代码生成, 开箱即用.
    6. 准生产环境的运行时应用监控.
    7. 与云计算的天然集成.

微服务

  1. 微服务是一种架构风格, 即一个应用应该是一组小型服务.
    1. 小型服务之间可以通过http的方式进行互通.
    2. 每个功能元素最终都是一个可独立替换和独立升级的软件单元.
  2. 单体应用: all in one
  3. 微服务

第一个SpringBoot工程

HelloWorld

  1. 实现: 浏览器发送hello请求, 服务器接收请求并处理, 响应helloworld字符串.
  2. 创建maven工程(jar)

    • 启动自动导入功能

  1. 引入依赖
    <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>
  2.  编写主程序, 启动springboot
    /**
     * @SpringBootApplication: 标识一个主程序类, 说明这是一个SpringBoot应用 
    */
    @SpringBootApplication
    public class HelloWorldMain {
    
        public static void main(String[] args) {
            
            //Spring应用启动起来
            SpringApplication.run(HelloWorldMain.class, args);
        }
    }
  3.  编写Controller
    @Controller
    public class HelloController {
    
        @ResponseBody
        @RequestMapping("/hello")
        public String hello() {
    
            return "hello world";
        }
    }
  4. 直接运行主启动类后即可直接访问.(访问路径默认不加项目名)
  5. 简化部署工作
    1. 在pom.xml中导入插件, 可以将应用打包成可执行的jar包
      <!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
    2. 打包后的jar包可以直接用java -jar运行.

HelloWorld探究

  1. pom文件
    1. 父项目
      <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.5.9.RELEASE</version>
          </parent>
    2. 它的父项目: springboot版本仲裁中心, 来真正管理类springboot应用里的所有依赖版本.
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>1.5.9.RELEASE</version>
          <relativePath>../../spring-boot-dependencies</relativePath>
      </parent>
    3. 所以有在dependencies中管理的就不用再写版本号了.
  2. 导入的依赖
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    1. spring-boot-starter-web: spring-boot场景启动器
      • 导入了web模块正常运行所需的所有依赖
    2. SpringBoot将所有的功能场景都抽取出来, 做成一个个starter(启动器), 只需要在项目里引入这场景启动器, 相关依赖都会导进来.

主启动类

  1. 核心注解: @SpringBootApplication
    1. SpringBoot应用标注在某一个类上说明这个类是SpringBoot的主配置类, SpringBoot就应该运行这个类的main方法来启动SpringBoot应用.
  2. @SpringBootApplication由一系列注解组成
    @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 {
  3. @SpringBootConfiguration: SpringBoot的配置类
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Configuration
    public @interface SpringBootConfiguration {
    }
    1. 标注在某个类上, 表示是一个SpringBoot的配置类.
    2. @Configuration配置类来标注这个注解.
  4. @EnableAutoConfiguration: 开启自动配置功能
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import(EnableAutoConfigurationImportSelector.class)
    public @interface EnableAutoConfiguration {
    1. Spring中繁多的配置, SpringBoot通过它帮我们自动配置.
    2. 将主配置类所在包及下面所有子包里边所有组件扫描到Spring容器中.
    3. @AutoConfigurationPackage: 自动配置包
      @Import(AutoConfigurationPackages.Registrar.class)
      public @interface AutoConfigurationPackage {
      }
      • Import(): 给容器中导入一个组件.
    4. @Import({EnableAutoConfigurationImportSelector.class}): 导入了哪些组件的选择器
      • 将所有需要导入的组件以全类名的方式返回: 这些组件被添加到容器中.
      • 会给容器中导入非常多的自动配置类(xxxAutoConfiguration): 给容器中导入该场景所有组件并配好.
      • 有了自动配置类, 就免去了我们手动写配置注入功能组件等工作.
posted @ 2020-05-11 17:54  yellowstreak  阅读(133)  评论(0编辑  收藏  举报