zoukankan      html  css  js  c++  java
  • springboot学习笔记1:springboot入门

    1.什么是springboot

    springboot是spring生态圈的一个轻量级的框架,换句话说springboot就是spring,是spring的一个衍生版本。

    使用spring框架,项目搭建完毕,spring无法实现任何代码,也就是需要开发人员自己去配置连接数据库,配置需要集成的框架mybatis,shiro等,以及对集成进来的框架进行xml配置,需要开发人员自己编写配置文件,自己进行整合。

    springboot框架其实就是已经集成好的框架的spring,就像是maven集成了很多的jar包一样,springboot继承好了很多的框架,在使用时,直接根据springboot提供的标准编写即可,不在需要配置xml文件。maven的思想是:约定优于依赖,springboot的思想是:约定优于配置。springboot官方给出的解释就是干掉xml文件,使用java代码进行编写配置。

    面试题:如何区分轻量级重量级?

    在项目中轻量级的框架会对自己项目中的代码有很少的侵入,如:

    hibernate:自动生成sql语句,使用hql编辑sql语句,如果有一天不使用这个框架了,那么就需要再自己写sql语句

    mybatis:不使用该框架时,里面的sql语句仍然可以使用

    2.为什么要使用springboot?

    傻瓜式开发,减少了大量的配置,降低了开发人员的标准,低层次的开发人员也可以进行业务逻辑的编写,无需知道内部运行原理以及框架的集成和整合。

    4.怎样使用springboot?

    目标:使用springboot在浏览器显示hello world!

    准备,创建maven工程,引入springboot的依赖:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.zs.springboot</groupId>
        <artifactId>springboot</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!--将maven工程的父类设置为springboot,就表示该工程时springboot的一个子工程-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.6.RELEASE</version>
        </parent>
    
        <dependencies>
            <!--在springboot中会定义很多个starter,每一个starter都有自己不同的作用
                web-start:引入项目所运行的基础环境
                    tomcat:最终springboot会自动把tomcat集成进项目中,不再需要使用外部tomcat进行启动
                    各种注解
                        @Controller
                        @Service
                        @RequestMapping
                        @ResponseBody
            -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    </project>
    pom

    我们点开父工程:

    按住ctrl键点开该父工程可以看到:

     spring-boot-starter-parent 的父工程为 spring-boot-dependencies ,而spring-boot-dependencies是顶级的父工程,是管理springboot的依赖的,只负责管理依赖,就像上一篇maven中的父工程一样,我们点开

    查看父工程,一级一级网上看:

     spring-boot-starter-web的父工程是spring-boot-starters

     spring-boot-starters的父工程是spring-boot-parent

     spring-boot-parent的父工程是spring-boot-dependencies,spring-boot-dependencies只是用来管理jar包的依赖,我们的项目继承了 spring-boot-starter-parent ,而它与parent虽然不一样,但是理论上,它在parent中,因此我们的项目就是与内部的 spring-boot-starter-web一样,是平级的,

    yi用一个图来帮助理解:

    在上面已经继承springboot,引入了依赖,下面开始使用springboot:

    1.编辑启动类@springbootApplication

    package com.zs.springboot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ApplicatonRun {
        public static void main(String[] args) {
            SpringApplication.run(ApplicatonRun.class, args);
        }
    }
    /**
    * 1.注意!!!!!!!ApplicationRun类必须要放在所有业务的上一层
    * model包
    * mapper包
    * com.zs.springboot.model
    * com.zs.springboot.mapper
    * 也就是说至少需要把ApplicationRun放在springboot包下
    *
    * 2.就是springboot的入口类
    * 也就是通过这个类启动整个项目
    * @SpringBootApplication:
    * 自动加载springboot所需要额配置
    * 并且把ApplicationRun类标识为整个项目的入口类
    *
    * 3.最终springboot是根据SpringApplication.run()来进行运行的
    * 所需要传递两个参数:
    * ApplicationRun.class
    * 让springboot整个框架知道ApplicationRun类就是整个项目入口类
    * args:main形参
    */

    2.编辑controller:

    /**
     * RestController,相当于controller和responseBody两个注解的合体,使用该注解这个控制器都返回json对象
     */
    @RestController
    public class TestController {
    
        @RequestMapping("/test")
        public String fun1() {
            return "hello world";
        }
    }

    运行,输入地址测试。

    5.springboot的运行原理:

      作用:实现自动配置,

      点开springbootApplication注解,

    可以看到这是一个组合注解:

      @SpringBootConfiguration:springboot所必须要的基础配置,相当于spring中的application.xml

      @EnableAutoConfiguration:允许自动加载配置

      点开EnableAutoConfiguration注解,这也是一个组合注解:

      

        @AutoConfigurationPackage:通过扫描包的形式自动加载,(例如:mybatis的mapper扫描器)

        @Import:导入,与spring配置文件中的improt标签的意思一样,    

            AutoConfigurationImportSelector:

               EnableAutoConfigurationImportSelector:自动加载配置的选择器(根据条件进行自动加载配置)

               继承了AutoConfigurationImportSelector

            AutoConfigurationImportSelector类中有一个方法:

              getCandidateConfigurations():根据某个特定的条件获取配置信息

        

        可以看到loadFactoryNames()方法:通过name属性值来获取加载器信息。点击SpringFactoriesLoader进入,可以看到:

           对源码进行分析:该方法会加载FACTORIES_RESOURCE_LOCATION也就是spring.factries配置文件中的配置信息,然后返回,

            每一个jar包都有一个该文件:

            

            loadFactoryNames()方法通过这个文件来进行加载配置,最后根据factories文件映射到配置类中,如:

              MybatisAutoConfiguration.java是经过xml配置文件转换来的,和xml配置文件一样的作用

    6.配置文件:

      添加myatis依赖后,重启项目会报错?原因:找不到数据源,需要配置数据源

    在springboot中配置数据库:

    配置文件要按照springboot官方规定的形式配置,需要使用yml或properties作为配置文件

    命名有规范,必须使用application作为文件名,否则springboot无法识别

    application.yml或application.properties

    存放位置有规定:
    官方推荐把配置文件放在resources目录(classpath)-->config文件夹
      如果config文件夹springboot没有检测到会从resources目录下去找
      resources:classpath(根目录)
      resources/config

    如图:

    #配置servlet
    #配置端口号
    server.port=8888
    #配置虚拟路径
    server.servlet.context-path=/zs
    
    #配置数据源
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=root
    spring.datasource.password=123456

    附上常用配置:

     

      

  • 相关阅读:
    过河卒 NOIp 2002 dp
    [POI2014]KUR-Couriers BZOJ3524 主席树
    【模板】可持久化线段树 1(主席树)
    EXPEDI
    取石子游戏 BZOJ1874 博弈
    【模板】文艺平衡树(Splay) 区间翻转 BZOJ 3223
    关于表白
    POJ 1951
    Codeforces 1032F Vasya and Maximum Matching dp
    Codeforces 1016F Road Projects
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11361034.html
Copyright © 2011-2022 走看看