zoukankan      html  css  js  c++  java
  • Springboot的开始

    Springboot

    如何区分轻量级和重量级?

      在项目中,轻量级的框架会对自己项目中的代码有很少的侵入,重量级则会与代码有很深入的交叉关联。

      例如hibernate(重量级)和mybatis(轻量级)

    1、什么是springboot?

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

    如果是spring框架,项目搭建完毕无法实现任何的代码,也就是说spring无法帮助开发人员连接数据,对数据库

    增删改查,也没有办法把框架集成进来,需要开发人员手动编写xml配置文件,自己进行整合。因此springboot就是

    要干掉xml文件,使用Java代码来编写配置(通过Java类来代替xml)。

    2、为什么要用springboot来代替spring?

      傻瓜式开发,减少了大量配置,降低了开发人员的标准,低层次开发人员也可以进行编写业务逻辑,不

    再需要了解内部运行原理以及框架的集成和整合。


    正式使用springboot:

    1、新建springboot项目:并在xml文件中引入:

     1 <parent>
     2         <groupId>org.springframework.boot</groupId>
     3         <artifactId>spring-boot-starter-parent</artifactId>
     4         <version>1.5.22.RELEASE</version>
     5     </parent>
     6 
     7     <dependencies>
     8     <!--
     9         在springboot中会定义很多个starter,每一个starter都有自己不同的作用
    10         web-start:引入项目所运行的基础环境,包含了Tomcat
    11             tomcat:最终springboot会自动把tomcat集成进项目中,不再需要使用外部tomcat进行启动
    12             各种注解
    13                 @Controller
    14                 @Service
    15                 @RequestMapping
    16                 @ResponseBody
    17     -->
    18     <dependency>
    19         <groupId>org.springframework.boot</groupId>
    20         <artifactId>spring-boot-starter-web</artifactId>
    21     </dependency>
    22     </dependencies>

    在这个配置文件中的parent标签和spring-boot-starter-web包是由官网提供的,前者是让此项目变成parent项目的子工程,

    后者是引入项目运行所需要的环境(Tomcat);在引入前者的时候,可能会报异常,如果出现异常,则是项目此时的

    maven路径为默认的路径,更改为自己的就行!

    引入parent标签可以形成父子关系,使用dependency也可以形成父子关系,

    他们的区别就是:通过<parent>引用的项目A,可以使用A项目中<dependency>中依赖的StringUtils的方法,

    但是不能调用A项目中自己定义的类和方法,C项目中通过<dependency>依赖的A,两者却都可以调用。

    于是我们经常在使用父子工程的时候:先建一个大项目,引入springbootjar包,

      新建N个小项目,利用parent标签让它们都作为大项目的子工程;

      小项目之间如果存在依赖关系,则使用dependency将项目打成jar包放入另一个项目。

    从spring-boot-starter-web追溯下去:

    springboot的运行原理:
                作用是实现了自动的配置
                @SpringbootApplication是一个组合注解
                    @SpringBootConfiguration:springboot所必须要的基础配置(application.xml)
                    @EnableAutoConfiguration:自动加载配置
                @EnableAutoConfiguration任然是一个组合注解
                    @AutoConfigurationPackage:通过扫描包的形式自动加载(eg:mybatis的mapper扫描器)
                    @Import:导入(在application.xml配置文件中<import />)
                        EnableAutoConfigurationImportSelector:自动加载配置的选择器(根据条件进行自动加载配置)
                        继承了AutoConfigurationImportSelector
                        AutoConfigurationImportSelector类中有一个方法
                            getCandidateConfigurations():根据某个特定的条件获取配置信息
                            loadFactoryNames():根据name的属性值来获取加载器信息
                            是根据了META-INF/spring.factories文件进行加载配置
                            根据factories文件映射到了配置类中
                                MybatisAutoConfiguration.java是经过xml配置文件转换来的,和xml配置文件一样的作用,包含有:
                                DataSource
                                SqlSessionFactory
                                sqlSessionTemplate

    在Java下新建一个包,在包下新建一个类:ApplicationRun,这个类是整个项目的入口类:

     1 package com.aaa.liu.springboot;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 
     6 /**
     7  * @Author 刘其佳
     8  * 2019/8/16 -- 8:24
     9  * @Version 1.0
    10  *
    11  * 1、注意:ApplicationRun类必须放在所有业务的上一层
    12  * 2、这是springboot的入口类
    13  * 也就是通过这个类启动整个项目
    14  * @SpringbootApplication
    15  * 自动记载springboot所需要的配置,并且把ApplicationRun类表示为整个项目的入口类
    16  * 3、最终Spring博偶有是根据SpringApplication.run()来进行运行的
    17  *  需要两个参数:Application.class:
    18  *                  让springboot整个框架知道ApplicationRun类就是整个项目入口类
    19  *              args:
    20  *                  main中的形参
    21  */
    22 
    23 @SpringBootApplication
    24 public class ApplicationRun {
    25 
    26     public static void main(String[] args) {
    27         SpringApplication.run(ApplicationRun.class,args);
    28     }
    29 }

    建一个controller包,并新建controller类

    在其中写上一个方法:

     1 package com.aaa.liu.springboot.controller;
     2 
     3 import org.springframework.web.bind.annotation.RequestMapping;
     4 import org.springframework.web.bind.annotation.RestController;
     5 
     6 /**
     7  * @Author 刘其佳
     8  * 2019/8/16 -- 8:57
     9  * @Version 1.0
    10  *
    11  * @Controller
    12  *      直接返回页面,不能处理Ajax请求,如果需要ajax请求需要添加@ResponseController注释
    13  * @RestController
    14  *      把整个controller相当于都添加了@ResponseController注释,不再需要在每一个方法上进行添加
    15  */
    16 @RestController
    17 public class Controller {
    18 
    19     @RequestMapping("/test")
    20         public String test(){
    21             return "测试springboot是否启动";
    22         }
    23 }

    这里要注意:使用的是RestController,而不是controller,具体看区别;

    整合mybatis:

    1 <!--mybatis-->
    2         <!--在springboot中没有整合mybatis,以下的jar包是mybatis公司自己为了整合
    3             springboot而提供的,我们在引入jar包时,需要加上版本号,即从maven中央仓库下载-->
    4         <dependency>
    5             <groupId>org.mybatis.spring.boot</groupId>
    6             <artifactId>mybatis-spring-boot-starter</artifactId>
    7             <version>1.3.0</version>
    8         </dependency>

     在添加mybatis依赖后,再次启动会抛异常,原因是mybatis框架被集成进项目中, 但是我们没有配置相关数据源信息。

     解决:配置数据库:

      按照springboot所规定的形式进行配置数据库,在官方文档中说明,可以使用文件进行配置数据源信息(springboot的主配置文件,也是以后操作最多的文件),

    有两种类型可以选择:properties类型文件和yml类型文件。

    注意:

      命名有规范:文件名必须要使用application,否则springboot无法识别;如application.properties     application.yml

      存放位置有规定:官方推荐把配置文件放在resources目录(classpath)下的config文件夹下,

              如果在config文件,springboot没有检测到会从resources目录下找;

              resources/config                resources

    eg:

     1 server:
     2   port: 8081 # 配置Tomcat,注意要在属性前加上一个空格
     3   context-path: /test #配置Tomcat的根路径(默认是/ 4 
     5   # 配置数据源
     6 spring:
     7   datasource:
     8     driver-class-name: com.mysql.jdbc.Driver
     9     url: jdbc:mysql://localhost:3306/mybatis
    10     data-username: root
    11     password: 123456

    banner

    spring项目启动的时候,会自动加载spring所提供的banner;

    替换banner:

      需要在resources目录中创建文件:banner.txt    

      在文件中:
    /**
    *_______________#########_______________________
    *______________############_____________________
    *______________#############____________________
    *_____________##__###########___________________
    *____________###__######_#####__________________
    *____________###_#######___####_________________
    *___________###__##########_####________________
    *__________####__###########_####_______________
    *________#####___###########__#####_____________
    *_______######___###_########___#####___________
    *_______#####___###___########___######_________
    *______######___###__###########___######_______
    *_____######___####_##############__######______
    *____#######__#####################_#######_____
    *____#######__##############################____
    *___#######__######_#################_#######___
    *___#######__######_######_#########___######___
    *___#######____##__######___######_____######___
    *___#######________######____#####_____#####____
    *____######________#####_____#####_____####_____
    *_____#####________####______#####_____###______
    *______#####______;###________###______#________
    *________##_______####________####______________
    */

     运行处的结果就可以将spring的banner改成自己的这个人物;

    如果想要关闭banner的显示:

     1 package com.aaa.liu.springboot;
     2 
     3 import org.springframework.boot.Banner;
     4 import org.springframework.boot.SpringApplication;
     5 import org.springframework.boot.autoconfigure.SpringBootApplication;
     6 
     7 /**
     8  * @Author 刘其佳
     9  * 2019/8/16 -- 8:24
    10  * @Version 1.0
    11  *
    12  * 1、注意:ApplicationRun类必须放在所有业务的上一层
    13  * 2、这是springboot的入口类
    14  * 也就是通过这个类启动整个项目
    15  * @SpringbootApplication
    16  * 自动记载springboot所需要的配置,并且把ApplicationRun类表示为整个项目的入口类
    17  * 3、最终Spring博偶有是根据SpringApplication.run()来进行运行的
    18  *  需要两个参数:Application.class:
    19  *                  让springboot整个框架知道ApplicationRun类就是整个项目入口类
    20  *              args:
    21  *                  main中的形参
    22  */
    23 
    24 @SpringBootApplication
    25 public class ApplicationRun {
    26 
    27     public static void main(String[] args) {
    28 //        SpringApplication.run(ApplicationRun.class,args);
    29 
    30         //关闭banner的话:
    31        SpringApplication springApplication=new SpringApplication(ApplicationRun.class);
    32        springApplication.setBannerMode(Banner.Mode.OFF);
    33        springApplication.run(args);
    34     }
    35 }
    乾坤未定,你我皆是黑马
  • 相关阅读:
    Allegro绘制PCB流程
    KSImageNamed-Xcode
    UIApplicationsharedApplication的常用使用方法
    javascript中间AJAX
    hdu1845 Jimmy’s Assignment --- 完整匹配
    嵌入式控制系统和计算机系统
    Bean行为破坏之前,
    jsonkit 分解nsarray 时刻 一个错误
    IO 字符流学习
    2013级别C++文章9周(春天的)工程——运算符重载(两)
  • 原文地址:https://www.cnblogs.com/liuqijia/p/11361050.html
Copyright © 2011-2022 走看看