SpringBoot:

Pivotal SpringBoot、SpringCloud,微服务架构。

SpringBoot : 对Spring框架进行了封装,目的快速搭建Spring应用,快速开发。

  1. 内置服务器,自动启动和web发布
  2. 取消了XML配置,完全采用Java配置模式(注解+编码)
  3. 有自动配置机制,可以创建大量常用对象
  4. starter启动工具集(jar)引入更加方便

     spring-boot-starter //包含ioc、aop、yaml解析、自动配置
     spring-boot-starter-web //包含mvc、rest、tomcat、boot-starter所有包
     spring-boot-starter-jdbc //包含hikari、spring-jdbc
     spring-boot-starter-test //包含junit、spring-test
    

SpringBoot开发体验:

  1. starter工具集导入(pom.xml)

     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
             <version>2.1.2.RELEASE</version>
         </dependency>
     </dependencies>
    
  2. application.properties或application.yml配置文件

     server.port=8888
    
  3. 业务组件代码(Controller、Service、Dao)

     @Controller
     public class HelloController {
    
         @RequestMapping("/hello")
         @ResponseBody
         public String say() {
             return "Hello SpringBoot";
         }
    
     }
    
  4. 启动类

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

SpringBoot程序结构:

SpringBoot程序由以下几部分构成:

  1. boot开发包(pom.xml)

    spring-boot-starter-xxx

  2. 主配置文件

    application.properties格式

    application.yml格式

  3. 启动类main

    @SpringBootApplication

    SpringApplication.run()

  4. 业务处理组件

    controller、service、dao、entity

SpringBoot启动过程:

SpringApplication.run()方法主要是构建一个Spring容器对象ApplicationContext,对容器环境、bean对象做设置。

//原始Spring通过xml配置文件实例化容器
ApplicationContext ac = new ClasspathXmlApplicationContext("applicationContext.xml");

//SpringBoot通过启动标记@SpringBootApplication实例化Spring容器
ApplicationContext ac = SpringApplication.run(xxx);
  1. 创建SpringApplication对象,做初始化工作(加载spring.factories文件的初始组件和Listener组件)
  2. 调用SpringApplication对象的run方法启动

    • 加载程序环境信息(Web环境、JDK环境…)
    • 打印Banner启动Logo
    • 创建ApplicationContext容器对象(根据环境不同创建不同的实例AnnotationConfigApplicationContext)
    • 设置Spring容器环境和参数
    • 往Spring容器中加载各种Bean组件
    • 如果底层有tomcat服务器,自动启动发布程序
    • 返回Spring容器对象

SpringBoot启动标记:

SpringBoot启动加载@SpringBootApplication是一个复合标记,包含以下几项重要功能:

  1. @SpringBootConfiguration或@Configuration(Bean定义)

    等价于之前XML配置中的< bean id=”” class=””>

    • 在启动类前追加@SpringBootConfiguration或@Configuration

        @SpringBootConfiguration//bean定义
        public class RunBoot {
      
        }
      
    • 在类中定义方法,追加@Bean标记

        @Bean(name="deptdao")//将返回的对象添加到spring容器中,id名默认为方法名
        public DeptDao deptDao2() {
            return new DeptDao();
        }
      
    • 如果有多个相同类型对象,可以使用@Primary

        //<bean id="deptDao1" class="cn.xdl.dao.DeptDao">
        @Bean//将返回的对象添加到spring容器中,id名默认为方法名
        @Primary//类型注入发生冲突,默认注入
        public DeptDao deptDao1() {
            return new DeptDao();
        }
      
    • 如果有多个配置类,可以使用@Import注解合并成一个

        @SpringBootConfiguration//bean定义
        @Import(BeanConfiguration.class)//加载BeanConfiguration配置类
        public class RunBoot {
      
        }
      
  2. @ComponentScan(Bean扫描)

    等价于之前XML配置中的<context:component-scan base-pakcage=””>

  3. @EnableAutoConfiguration (自动配置)

    SpringBoot特有功能,省略大量的XML配置定义。