zoukankan      html  css  js  c++  java
  • SpringBoot-基础

    第一个SpringBoot程序

    1. 创建方法

    • 可以在官网直接下载后, 导入idea开发

    • 直接使用idea创建一个springboot项目(一般开发直接在idea中创建)

    2. 第一个程序

    package com.wang.helloWorld;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    //本身就是Spring的一个组件!
    
    //程序的主入口
    @SpringBootApplication
    public class HelloWorldApplication {
    
       public static void main(String[] args) {
          //SpringApplication
          SpringApplication.run(HelloWorldApplication.class, args);
       }
    
    }
    

    controller

    package com.wang.helloWorld.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    //自动装配
    @RestController
    public class HelloController {
    
        //接口: http://localhost:8080/hello
        @RequestMapping("/hello")
        public String Hello() {
            //调用业务, 接收前端的参数
            return "Hello, World!";
        }
    }
    

    注意

    • 代码要在和application同级的目录下建文件夹,否则会无法生效!

    3. 修改port和banner

    1. 修改port

    在resource目录下的application.properties文件中

    #更改项目的端口号
    server.port=8081
    

    2. 修改banner

    在resource的目录下新建banner.txt, 放入直接喜欢的banner即可!

    4. 原理初探

    1. 自动配置

    1. pom.xml

    • spring-boot-dependencies: 核心依赖在父工程中

    • 我们在写或引入一些springboot依赖的时候, 不需要指定版本, 就因为有这些版本仓库!

    2. 启动器

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    • 启动器就是springboot的启动场景
    • 比如spring-boot-starter-web, 会帮我们自动导入web的所有依赖
    • springboot会将所有的功能场景, 变成一个个的启动器
    • 我们要使用什么功能, 就只需要找到对应的启动器即可

    3. 主程序

    package com.wang;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    //@SpringBootApplication : 标注这个类是一个springboot的应用, 启动类下的所有配置导入
    @SpringBootApplication
    public class Springboot01HelloworldApplication {
    
        public static void main(String[] args) {
            //将springboot应用启动
            SpringApplication.run(Springboot01HelloworldApplication.class, args);
        }
    
    }
    

    注解

    • @SpringBootConfiguration : springboot的配置

      • @Configuration : spring配置类(用java注解配置, 不用xml)
      • @Component : 说明这也是一个spring组件
    • @EnableAutoConfiguration : 自动配置

      • @AutoConfigurationPackage : 自动配置包

        • @Import(AutoConfigurationPackage.Registrar.class) : 自动配置 包注册
      • @Import(AutoConfigurationImportSelector.class) : 自动配置导入选择

        • getCandidateCOnfiguration(annotationMetadata, attributes) : 获取候选的配置

          • protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
                List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
                Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
                return configurations;
            }
            

    META-INF/spring.factories : 自动配置的核心文件

    image-20200916142219311

    Properties properties = PropertiesLoaderUtils.loadProperties(resource);
    

    所有的资源加载到配置类中

    4. 原理图

    SpringBoot自动配置原理

    5. @ConditionalOnXXX

    • 核心注解, 这个注解是自动配置没有全部生效而需要导入对应的start才生效的原因!

    • @ConditionalOnXXX(XXX, XXX, ...) 括号中的条件都满足这个类才生效

    • XXX: Class, Property, ...

    6. 结论

    SpringBoot所有的自动配置都在启动类中扫描并加载

    扫描了spring.factories, 所有的自动配置类都在这里面, 但不一定生效

    要看判断条件是否成立(@ConditionalOnXXX), 只要导入了对应的starter(pom), 就有对应的启动器了

    有了启动器, 我们自动配置就会生效, 然后就配置成功了

    步骤:

    1. SpringBoot在启动的时候, 从类路径/META-INF/spring.factories 获取了指定的值
    2. 将这些自动配置的类导入容器, 自动配置类就会生效, 帮我们自动配置
    3. 以前我们需要手动配置的东西, 现在SpringBoot帮我们做了
    4. 整合JavaEE, 解决方案和自动配置的东西都在spring-boot-autoconfigure-版本号.RELEASE .jar这个包下
    5. 它会把所有需要导入的组件, 以类名的方式返回, 这些组件就会被添加到容器
    6. 容器中也会存在非常多的XXXAutoConfiguration的文件, 就是这些类会给容器中导入这个场景需要的所有组件, 并自动配置@Configuration (JavaConfig!)
    7. 有了自动配置类, 免去了我们手动配置类的麻烦

    2. Spring主程序启动

    1. SpringApplication类

    这个类主要做了四件事情

    1. 推断应用的类型是普通的项目还是Web项目(Web项目会一直运行)

    2. 查找并加载所有可用初始化器 , 设置到initializers属性中

    3. 找出所有的应用程序监听器,设置到listeners属性中

    4. 推断并设置main方法的定义类,找到运行的主类

      • SpringApplication.run(主类.class, args);

    2. run方法

    SpringBoot-Run

    核心是利用Java来配置 JavaConfig

    其中的核心是@Configuration和@Bean

    3. SpringBoot的理解

    • 自动装配
    • run方法
      • 判断是否为web项目
      • 找到运行的主类
      • 监听器
      • 主要还是SpringApplication类做的四件事
  • 相关阅读:
    Android--判断是否连接成功了指定wifi
    Android--判断listview上下滑动的方法
    Android--获取高清的app图标
    Android--px(像素)和dp、sp之间的相互转化
    Android--自定义半圆环型进度(带动画)
    Android--将实体类转化成Json和Map的基类
    Android--自定义控件---自动分页的GridView
    Android--解决EditText放到popupWindow中,原有复制、粘贴、全选、选择功能失效问题
    Android--仿一号店货物详情轮播图动画效果
    Switch-case 内定义变量的问题
  • 原文地址:https://www.cnblogs.com/wang-sky/p/13679777.html
Copyright © 2011-2022 走看看