zoukankan      html  css  js  c++  java
  • SpringBoot_01

    一.初识springboot

    个人总结:springboot是一个开发更加便捷的spring的技术框架,通过引入启动器便可以快捷的让spring框架和其他框架进行整合,

    springboot很容易上手,其内部对各个框架(不是所有)都有默认的配置,通过引入启动器,springboot会加载对应框架的默认配置,达到快速整合框架的效果,大大缩减了搭建环境的时间.

    在springboot项目中的resources文件加下,可以编写application.properties或者application.yml或者application.yaml文件来修改springboot对各个框架的默认配置,来实现我们的需求.

    部分名词:

    引导类: 就是springboot项目的启动类

    启动器: 即springboot整合后的框架的坐标,

    springboot的很重要的一点:约定大于配置

    1.1.什么是SpringBoot

    SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品:

     

    我们可以看到下面的一段介绍:

    Takes an opinionated view of building production-ready Spring applications. Spring Boot favors convention over configuration and is designed to get you up and running as quickly as possible.

    翻译一下:

    用一些固定的方式来构建生产级别的spring应用。Spring Boot 推崇约定大于配置的方式以便于你能够尽可能快速的启动并运行程序。

    其实人们把Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。

    1.2.为什么要学习SpringBoot

    java一直被人诟病的一点就是臃肿、麻烦。当我们还在辛苦的搭建项目时,可能Python程序员已经把功能写好了,究其原因注意是两点:

    • 复杂的配置

    项目各种配置其实是开发时的损耗, 因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。

    • 一个是混乱的依赖管理

    项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,随之而来的不兼容问题毫无疑问会是生产力杀手。

    而SpringBoot让这一切成为过去!

    Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器starter),这样我们就可以简单的开始。多数Spring Boot应用只需要很少的Spring配置。

    我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程。

    1.3.SpringBoot的特点

    Spring Boot 主要目标是:

    • 为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验
    • 开箱即用(启动器starter-其实就是SpringBoot提供的一个jar包),但通过自己设置参数(.properties),即可快速摆脱这种方式。
    • 提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等
    • 绝对没有代码生成,也无需 XML 配置。

    更多细节,大家可以到官网查看。

     

    二.快速入门

    1. 搭建maven工程

    2. 引入父maven坐标

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.1.3.RELEASE</version>

    </parent>

    父maven中规范了大部分坐标的版本,所以添加依赖时可以不写,默认使用父工程的,但是mysql驱动版本最好自己定义,默认的mysql版本太低,

    3. 添加启动器(即对应框架的启动器坐标)

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

    </dependencies>

    需要注意的是,我们并没有在这里指定版本信息。因为SpringBoot的父工程已经对版本进行了管理了。

    这个时候,我们会发现项目中多出了大量的依赖:

     

    这些都是SpringBoot根据spring-boot-starter-web这个依赖自动引入的,而且所有的版本都已经管理好,不会出现冲突。

    如果有需求可以设置jdk版本

    <properties>

        <java.version>1.8</java.version>

    </properties>

    4. 最后一步,编写引导类

    @SpringBootApplication

    public class Application {

        public static void main(String[] args) {

            SpringApplication.run(Application.class, args);

        }

    }

    4.* 注意

    启动器类不能直接写在java目录下,

    启动器默认加载同包及子包下的内容

    所以,启动器的位置,自己看着办  ^_^

    5. 进行编写controller和静态界面

    基本环境已经搭建好,

    剩下的就是像以前一样编写controller层和界面

    界面一般放在resources文件夹下的static目录下进行加载

     

    进入ResourceProperties类查看

    springboot默认会加载图片中的四个路径的界面文件

    5.* 进阶

    除了使用springmvc的注解外,spring还提供了更加简洁的注解(将源springmvc的一个或多个注解整合成一个)

     

    @RestController注解便代表Controller和ResponseBody注解的同时使用

    6. 启动测试

    接下来,我们运行main函数,查看控制台:

     

     

    并且可以看到监听的端口信息:

     

    • 1)监听的端口是8080
    • 2)SpringMVC的映射路径是:/
    • 3)/hello路径已经映射到了HelloController中的hello()方法

    打开页面访问:http://localhost:8080/hello

     

    测试成功了!

     

    三. SpringBoot的项目模板

    快速入门只能算是快速了解springboot,真正的快速开发一般使用项目模板

    1.    创建工程

     

    接着填写自己项目的信息

     

    这里选用lombok工具

     

     

    next---》finish完成工程创建

    2.    根据自己需求编写controller和界面 ^-^,注意自己编写的controller要能被引导类扫描到哦

    四.springboot添加springmvc拦截器

    官方文档说明:

    拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。在SpringBoot官方文档中有这么一段说明:

    If you want to keep Spring Boot MVC features and you want to add additional MVC configuration (interceptors, formatters, view controllers, and other features), you can add your own @Configuration class of type WebMvcConfigurer but without @EnableWebMvc. If you wish to provide custom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter, or ExceptionHandlerExceptionResolver, you can declare a WebMvcRegistrationsAdapter instance to provide such components.

    If you want to take complete control of Spring MVC, you can add your own @Configuration annotated with @EnableWebMvc.

    翻译:

    如果你想要保持Spring Boot 的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现WebMvcConfigurer,并且添加@Configuration注解,但是千万不要@EnableWebMvc注解。如果你想要自定义HandlerMappingHandlerAdapterExceptionResolver等组件,你可以创建一个WebMvcRegistrationsAdapter实例 来提供以上组件。

    如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@Configuration注解和@EnableWebMvc注解

    总结:通过实现WebMvcConfigurer并添加@Configuration注解来实现自定义部分SpringMvc配置。

    首先我们定义一个拦截器:

     

    编写步骤

    1.    编写自定义拦截器,实现HandlerInterceptor接口,重写三个方法

    package com.ahd.interceptor;

    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class MyInterceptor implements HandlerInterceptor{
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("执行自定义拦截器前");
            return true;
        }

        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

        }

        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

        }
    }

    2.    配置自定义拦截器

    编写类实现接口WebmvcConfiguration并且加上注解@Configuration,

    @Configuration
    public class MVCConfig implements WebMvcConfigurer{
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyInterceptor()).addPathPatterns("/");
        }
    }

    五.引用别人的总结

    SpringBoot为我们提供了默认配置,而默认配置生效的步骤:

    • @EnableAutoConfiguration注解会去寻找META-INF/spring.factories文件,读取其中以EnableAutoConfiguration为key的所有类的名称,这些类就是提前写好的自动配置类
    • 这些类都声明了@Configuration注解,并且通过@Bean注解提前配置了我们所需要的一切实例。完成自动配置
    • 但是,这些配置不一定生效,因为有@ConditionalOn注解,满足一定条件才会生效。比如条件之一:是一些相关的类要存在
    • 类要存在,我们只需要引入了相关依赖(启动器),依赖有了条件成立,自动配置生效。
    • 如果我们自己配置了相关Bean,那么会覆盖默认的自动配置的Bean
    • 我们还可以通过配置application.properties文件,来覆盖自动配置中的属性

    1)启动器

    所以,我们如果不想配置,只需要引入依赖即可,而依赖版本我们也不用操心,因为只要引入了SpringBoot提供的stater(启动器),就会自动管理依赖及版本了。

    因此,玩SpringBoot的第一件事情,就是找启动器,SpringBoot提供了大量的默认启动器

    2)全局配置

    另外,SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义application.properties文件来进行覆盖。这样虽然使用的还是默认配置,但是配置中的值改成了我们自定义的。

    因此,玩SpringBoot的第二件事情,就是通过application.properties来覆盖默认属性值,形成自定义配置。我们需要知道SpringBoot的默认属性key,非常多,可以再idea中自动提示

     

    六. springboot+mybatis

    1.    使用项目模板搭建工程

    略,通三

    2.    引入坐标(启动器)

    <dependencies>
        <!--通过项目模板,已经自动配置上了springmvc启动器,lombok启动器和test启动器-->
        <!--项目模板自动配置 开始-->
       
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--项目模板自动配置 结束-->

        <!--配置springboot整合mybatis 开始-->
        <!--配置mybatis 开始-->
       
    <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <!--配置mybatis 结束-->
        <!--配置jdbc 开始-->
            <!--spring中的jdbc连接和事务是配置中的重要一环,在SpringBoot中该如何处理呢?
            我们只要找到SpringBoot提供的启动器即可:
             -->
       
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--配置jdbc 结束-->
        <!--配置mysql 开始-->
       
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--配置mysql 结束-->
        <!--配置Druid连接池 开始-->
       
    <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
        <!--配置Druid连接池 结束-->
        <!--配置springboot整合mybatis 结束-->


    </dependencies>

    3.    编写配置文件, application.yml    (yml和yaml一样)

    spring:
      datasource:
        type:
    com.alibaba.druid.pool.DruidDataSource
        username: root
        url: jdbc:mysql:///saas-export-96
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
    mybatis:
      configuration:
        map-underscore-to-camel-case: true
      type-aliases-package:
    com.ahd.pojo
      mapper-locations: /mapper/**
    mapper-locations: /com.ahd.dao/**
    #bug

    这个地方有点狗,同学编写成功了, 我这,不能写成com/ahd/dao,头疼!,浪费了我很多时间不知道什么原因

    4.    修改引导类(在引导类加上dao层基包注解,将包含dao接口的文件夹填上)

     

    5.    编写dao,service,controller层

  • 相关阅读:
    模块模式——属性
    防止变量被覆盖
    自执行匿名函数语法和普通函数语法对比
    JavaScript更改原型
    JavaScript覆盖原型以及更改原型
    JavaScript原型链
    作用域链和原型链描述javaScript访问变量和属性的顺序
    javascript高级变量提升和执行环境对象
    构建第一个单页应用
    error: expected identifier before numeric constant 问题
  • 原文地址:https://www.cnblogs.com/aihuadung/p/11592588.html
Copyright © 2011-2022 走看看