spring boot学习过程

本文详细介绍了SpringBoot的基本概念、配置、依赖管理,包括POM.xml的使用、起步依赖的选择、`@SpringBootApplication`的配置、RESTfulAPI的创建、以及如何通过统一结果封装类处理返回值。此外,还探讨了分层架构、控制反转和依赖注入在SpringBoot中的应用。
摘要由CSDN通过智能技术生成

spring boot

1.初步认识spring

2.原理初探

2.1pom.xml

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

2.2起步依赖

  • 官网:Spring Boot Reference Documentation

  • 启动依赖
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    ​
    测试依赖
    <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-test</artifactId>
              <scope>test</scope>
    </dependency>

2.3启动程序

  • @SpringBootApplication
    public class DemoApplication {
    ​
       public static void main(String[] args) {
           SpringApplication.run(DemoApplication.class, args);
      }
    }
    • @SpringBootConfiguration:spring boot的配置
      @Configoration:spring配置类
      @Component:spring组件
      @EnableAutoConfiguration:自动配置
      @@AutoConfigurationPackage:自动配置包
      @@Import({AutoConfigurationPackages.Registrar.class}):配置选择器注册包
      
      @Import({AutoConfigurationImportSelector.class}):自动配置导入选择

2.4RestController注解

RestController=@Controller(控制器)+@ResponseBody(将请求体程序中的return直接返回到json中)
​
@RestController
public class HelloController {
   @RequestMapping("/hello")          //每个这个被称为一个请求接口
  public String hello() {
      System.out.println("Hello world~");
      return "Hello world~";                     //也就是将这个return这的值反应回去
  }                                              //这个反应回去的是字符串
 
 
  @RequestMapping("/addr")
  public Address getAddr(){
       Address addr=new Address();
       addr.setProvince("广东");
       addr.setCity("深圳");
       return addr;//这个返回的是对象
  }
}

图示

image-20240410200609488

2.5基于2.4的结果进一步改造

2.5.1why?

------因为上述返回结果可能各式各样

2.5.2how?

-----统一结果封装类

  • 统一结果封装类

    • package com.example.hang.pojo;
      ​
      public class Result {
         private Integer code;
         private String msg;
         private Object data;
      ​
         public Result(){
        }
         public Result(Integer code,String msg,Object data){
             this.code=code;
             this.msg=msg;
             this.data=data;
        }
      ​
         public Integer getCode() {
             return code;
        }
      ​
         public String getMsg() {
             return msg;
        }
      ​
         public Object getData() {
             return data;
        }
      ​
         public void setCode(Integer code) {
             this.code = code;
        }
      ​
         public void setMsg(String msg) {
             this.msg = msg;
        }
      ​
         public void setData(Object data) {
             this.data = data;
        }
      ​
         public static Result success(Object data){
             return new Result(1,"success",data);
        }
         public static Result success(){
             return new Result(1,"success",null);
        }
         public static Result error(String msg){
             return new Result(0,"msg",null);
        }
      ​
         public String toString(){
             return "Result{"+
                     "code"+code+
                     ",msg='"+msg+'\''+
                     ",data="+data +"}";
        }
      }
  • 使用实例

    • RestController=@Controller(控制器)+@ResponseBody(将请求体程序中的return直接返回到json中)
      ​
      @RestController
      public class HelloController {
         @RequestMapping("/hello")          //每个这个被称为一个请求接口
        public String hello() {
          //方式一:直接return Result类
            return new Result(1,"success","Hello world");//也就是将这个return这的值反应回去
        //方式二:直接调用构造函数
           return Result.success("Hello world");
        
        }                                              
       
       
        @RequestMapping("/addr")
        public Address getAddr(){
             Address addr=new Address();
             addr.setProvince("广东");
             addr.setCity("深圳");
             return Result.success(addr);//这个返回的是对象
        }
      }

3.程序执行

3.1原始方式

image-20240409204554298

3.2springboot方式

3.2.1简单参数
  • 图像

    image-20240409204639002

  • 设计到了(@RequestParam的注解)---用于解决后端类型与前端类型不同的情况)

    • image-20240409205443902

3.2.2实体参数
  • 简单实体参数

    • image-20240409210542928

  • 复杂实体参数

    • image-20240409210457099

3.3数组集合参数(一般用于复选框)

3.3.1数组参数

图示

image-20240409213158259

3.3.2集合参数

图示

image-20240409213326959

3.4日期参数

图示

image-20240409213826731

3.5json参数

图示

image-20240409214344773

3.6路径参数

图示

image-20240409214912025

4.分层结耦

4.1三层架构

  • controller层

  • Service层

  • Dao层

image-20240411085340618

image-20240411090737367

4.2分层结耦

4.2.1why?

对于下面图片每当调用service层中的类名改变时,他的controller层所建立的对象也要改变

image-20240411091802251

4.2.2how?

引入spring boot中的控制反转和依赖注入如下图所示

image-20240411092012105

4.3IOC&DI入门

4.3.1Service层和Dao层的实现类,交给IOC容器管理

image-20240411092742586

4.3.2为controller和service层注入运行时,所依赖对象

image-20240411092901521

4.4IOC详解

4.4.1Bean的声明方式

image-20240411093143854

4.4.2Bean扫描:

规则:启动类中@Spring Boot Application自带的@ComponentScan --只扫描当前包和当前子包,要扫描别的包要自己手动声明@ComponentScan()

4.5DI详解

image-20240411101324131

image-20240411101355132

  • 27
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值