• Spring boot入门有手就行_SpringBoot简介及3种项目搭建方式


    SpringBoot简介及项目搭建

    0x01_SpringBoot简介

    Spring优缺点

    Spring的优点分析

    Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBeanEJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。

    Spring的缺点分析

    虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入 了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。 所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编 写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。 除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

    springboot

    Spring Boot是Spring公司的一个顶级项目,和Spring Framework是一个级别的。

    Spring Boot实际上是利用Spring Framework 4 自动配置特性完成。编写项目时不需要编写xml文件。发展到现在,Spring Boot已经具有很很大的生态圈,各种主流技术已经都提供了Spring Boot的启动器。

    springboot优点:

    • 使用Spring Boot可以创建独立的Spring应用程序
    • 在Spring Boot中直接嵌入了TomcatJettyUndertow等Web 容器,在使用SpringBoot做Web开发时不需要部署WAR文件
    • 通过提供自己的启动器(Starter)依赖,简化项目构建配置
    • 尽量的自动配置Spring和第三方库
    • 绝对没有代码生成,也不需要XML配置文件

    springboot版本介绍

    • SNAPSHOT:快照版,即开发版。
    • CURRENT:最新版,但是不一定是稳定版。
    • GAGeneral Availability,正式发布的版本。

    现在的最新的正式发布的版本是2.7.5,我以这个版本进行学习。

    Spring boot的核心:

    • 起步依赖- 起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
    • 自动配置 -Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定 Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

    启动器

    Spring框架在项目中作用是Spring整合各种其他技术,让其他技术使用更加方便。Spring Boot的启动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关jar包,还包含了这个技术的自动配置,以前绝大多数XML配置都不需要配置了。当然了,启动器中自动配置无法实现所有内容的自动配置,在使用Spring Boot时还需要进行少量的配置(这个配置不是在xml中了,而是在propertiesyml中即可)。如果是Spring自己封装的启动器的artifact id名字满足:spring-boot-starter-xxxx,如果是第三方公司提供的启动满足:xxxx-spring-boot-starter。以后每次使用Spring Boot整合其他技术时首先需要考虑导入启动器。

    0x02_Spring boot项目搭建方式1

    创建一个空项目(Empty Project)SpringBootWorkSpace,专门放Spring boot的学习案例。(这个是我的个人习惯,因为有时候文件太多了放的乱七八糟)

    在这个项目中创建普通的Maven模块(不选择任何模版archetype

    image-20221114215735953

    创建之后的目录:

    image-20221114215831895

    继承父项目:

        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.7.5version>
        parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    导入依赖:

        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
                <version>2.7.5version>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    看一下循环的依赖图:

    image-20221114224012386

    书写controller层的代码,和Spring MVC一样:

    package com.bones.controller;
    
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class MyController {
        @ResponseBody
        @RequestMapping("/testController")
        public String testController(){
            return "Hello Spring Boot";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    写启动类,建议在隔层包的同级创建,比如你的controller类写在com.bones.controller包下,那么启动类写在com.bones.controller这一层包同级。

    Spring Boot的启动类的作用是启动Spring Boot项目,是基于Main方法来运行的。

    注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository…),扫描位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。

    启动类和启动器的区别

    启动类表示项目的启动入口

    启动器表示jar包的坐标

    必须在包中新建这个类,不能直接放入到java文件夹。

    com.bones下新建自定义名称的类(规范:XXXXApplication),可以是项目上下文路径Application

    image-20221114223902967
    package com.bones;
    
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringbootPro01Application {
        public static void main(String[] args) {
            //第一个参数是启动类的字节码文件,因为要扫描这个启动类所在的包,第二个参数就是main方法的args参数传入即可
            SpringApplication.run(SpringbootPro01Application.class,args);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    点击main方法启动即可,可以看一下打印的日志:

    image-20221114224226225

    访问localhost:8080/testController

    image-20221114224317739

    显然执行了controller 中的处理单元。

    0x03_Spring boot项目搭建方式2

    可能在公司中可能会出现必须继承某个项目,如果Spring Boot用了继承就不能继承别的项目了。所以Spring Boot还提供了依赖的方式。


    重新创建一个模块:(还是一个普通的maven模块)

    image-20221114230323272

    导入依赖:

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-dependenciesartifactId>
                    <version>2.7.5version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
            dependencies>
        dependencyManagement>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
                <version>2.7.5version>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    和前一个方法一样写个controller测试即可。

    0x04_Spring boot项目搭建方式3(最推荐)

    这个方法对于想要省事的来说简直太友好了。这个方式是IDEA自带的项目初始化插件的。


    再创建一个项目,但是此时选择Spring initializer

    image-20221114231413317

    image-20221114231507580

    启动成功之后,直接写controller进行测试。启动类不需要自己写,已经有了。(这就是这个方法最推荐的原因,简直爽歪歪)

  • 相关阅读:
    团队协作:如何利用 Gitee 实现多人合作项目的版本控制
    如何保证Redis和数据库数据一致性
    【MySQL】高性能高可用设计实战-索引篇(MySQL专栏启动)
    【多线程】线程安全
    使用nsenter在容器内部执行宿主机的命令
    Fortify-设置中文语言
    写爬虫被字体反爬了怎么办?
    4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2
    阿里面试,HashMap与Redis哈希结构扩容的区别
    基于Springboot外卖系统07:员工分页查询+ 分页插件配置+分页代码实现
  • 原文地址:https://blog.csdn.net/qq_51550750/article/details/127858107