SpringBoot2

发布时间 2023-12-13 11:15:06作者: 西芹-小汤圆

概述

SpringBoot是整合Spring技术栈的一站式框架。SpringBoot是简化Spring技术栈的快速开发脚手架。

优点

  • 创建独立Spring应用
  • 内嵌web服务器
  • 自动starter依赖,简化构建配置
  • 自动配置Spring以及第三方功能
  • 提供生产级别的监控、健康检查及外部化配置
  • 无代码生成、无需编写XML

入门

@RestController注解包含@ResponseBody和@Controller注解。

在导入spring-boot-maven-plugin遇到Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found的错误时,可以通过添加版本号解决,添加版本号是很多找不到文件时解决方案。

SpringBoot不必打包成war包,打包成jar包即可,只需导入spring-boot-maven-plugin,springboot会将所需的依赖一同打包入jar包。使用Maven的Lifecycle中package打包即可。

@SpringBootApplication注解指明启动程序,只需执行main方法即可启动项目。

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}

自动配置原理

父项目做依赖管理,里面指定了很多依赖的版本号。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

starter场景启动器:spring-boot-starter-*是官方的,而*-spring-boot-starter是第三方。

springboot为我们自动配好Tomcat、自动配好SpringMVC、自动配好Web常见功能,如:字符编码问题、默认的包结构、各种配置拥有默认值、按需加载所有自动配置项。

主程序所在包及其下面的子包都会被默认进行组件扫描。

配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的。

配置类本身也是组件,可以通过getBean方法获取。

常用注解

@Configuration中的属性proxyBeanMethods的值默认为true,是新特性,用于代理bean的方法。true的时候保证获取的对象是单实例的,false则会保留代理对象,可以获取新的对象。启用代理,就是先创建bean,每次用的时候直接拿。如果类组件之间没有依赖关系则使用false,若有则使用true。

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
public class MainApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        
        Pet tom01 = run.getBean("tom", Pet.class);
        Pet tom02 = run.getBean("tom", Pet.class);
        System.out.println("组件:"+(tom01 == tom02));//在true模式下,两者是相同的

        //配置类本身也是组件
        MyConfig bean = run.getBean(MyConfig.class);
        System.out.println(bean);

        //如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。
        //保持组件单实例,使用配置类调用bean
        User user = bean.user01();
        User user1 = bean.user01();
        System.out.println(user == user1);
    }
}

@Import注解给容器中使用无参构造创建出填入类型的组件:@Import({User.class, DBHelper.class})

@Conditional注解实现条件装配,若满足Conditional指定的条件,则进行组件注入:@ConditionalOnMissingBean(name = "tom")。

@ImportResource注解用于将xml的组件导入的配置类中:@ImportResource("classpath:beans.xml")。

配置绑定

@ConfigurationProperties读取properties文件中的内容,并将其封装到JavaBean中,只需填写前缀接口,属性会自动对应类中的属性。

@Component
@ConfigurationProperties(prefix="mycar")
public class Car{
  ......
}

在配置类中使用@EnableConfigurationProperties(Car.class)注解开启Car属性配绑定功能并将Car组件自动注册到容器中,这样可以少写@Component注解。

自动配置原理

  1. 引导加载自动配置类。
  2. 按需开启自动配置项。
  3. 修改默认配置,以用户配置的优先。

开发步骤

  1. 引入场景依赖
  2. 查看哪些部分进行了自动化配置,在application.propreties中添加debug=true可以查看。
  3. 配置是否需要修改,参照文档修改配置项,自定义加入或替换组件。

开发工具

  1. lombok
  2. devtools,ctrl+F9更新。
  3. Spring Initializr。

开发

yaml中字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义。

欢迎页面有两种方式:1、静态资源下index.html;2、Controller能够处理/index请求。

只需将图片命名为favicon.ico即可作为网站的图标。

Rest风格如果使用客户端工具,如PostMan直接发送Put、Delete方式请求,无需使用Filter。

静态资源访问

只要静态资源放在类(resources)路径下:/static/public/resources/META-INF/resources,就可以通过当前项目根路径/ + 静态资源名访问。

原来是静态映射/**,请求进来优先找Controller是否能处理,不能处理的所有请求都交给静态资源猫处理器。

静态资源访问默认无前缀,可以通过static-path-pattern修改前缀。

常用注解

矩阵变量写法:/cars/sell;low=34;brand=byd,audi,yd

注解 作用
@PathVariable 路径变量
@RequestHeader 获取请求头
@RequestParam 获取请求参数
@CookieValue 获取cookie值
@RequestBody 获取请求体[POST]
@RequestAttribute 获取request域属性
@MatrixVariable 矩阵变量