SpringBoot 简介及注解

一、SpringBoot 简介

  • Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。
    • 大家觉得挺好用,于是按照这种模式搞了一个 MVC框架(一些用Spring 解耦的组件),用开发 web 应用( SpringMVC )。
    • 然后有发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”(starter),这套就是 Spring Boot
  • SpringBoot 从本质上来说就是 Spring,简化了 Spring中的配置和统一各种依赖的版本
  • 核心特性:
    • 自动配置:自动提供 Spring 应用程序常见应用功能的相关配置
    • 起步依赖:告诉 SpringBoot 需要什么功能,就能引入对应的库,无需考虑该功能依赖库的版本问题
    • 监控程序 Actuator:可以深入了解 SpringBoot 应用程序内部情况,如创建了哪些 Bean、自动配置的决策、应用程序的状态信息 


二、常用注解

(一) 组件相关注解

1. @Controller

  • 用于修饰 MVC 中controller层的组件,会被组件扫描并生成实例化对象
  • 通常与@RequestMapping联用,当SpringMVC获取到请求时会转发到指定路径的方法进行处理

2. @Service

  • 用于修饰service层的组件,会被组件扫描并生成实例化对象
  • service层组件专注于系统业务逻辑的处理

3. @Repository

  • 用于修饰dao层的组件,会被组件扫描并生成实例化对象
  • dao层组件专注于系统数据的处理,例如数据库中的数据

4. @Component

  • 用于修饰SpringBoot中的组件,会被组件扫描并生成实例化对象
  • @Controller@Service@Repository都是特殊的组件注解

(二)依赖注入注解

1. @Autowired

  • 注释在 类的成员变量 上,自动为变量匹配 Bean 实例
    • // 替代了 private MyService myService = new MyService();
      @Autowired
      private MyService myService;
  • 注释在 类的构造函数 上,自动为参数匹配 Bean 实例
    • private MyService myService;
          
      @Autowired
      public MyClass(MyService myService) {
          this.myService = myService;
      }
  • 注释在 类的方法 上,自动为参数匹配 Bean 实例
    • private MyService myService;
          
      @Autowired
      public void setMyService(MyService myService) {
          this.myService = myService;
      }

2. @Resource

  • 会根据对象的名称自动注入依赖对象
  • 如果想要根据类型进行注入,可以设置属性为 type = UmsAdminService.class

3. @Qualifier

  • 当同一个对象有多个实例可以注入时,使用@Autowired注解无法进行注入
  • 这时可以使用@Qualifier注解指定实例的名称进行精确注入

(三)实例与生命周期相关注解

1. @Bean

  • 用于修饰方法,标识该方法会创建一个Bean实例,并交给Spring容器来管理

2. @Scope

  • 用于声明一个SpringBean实例的作用域,作用域的范围有以下几种:
    • singleton:单例模式,在Spring容器中该实例唯一,Spring默认的实例模式。
    • prototype:原型模式,每次使用实例都将重新创建。
    • request:在同一请求中使用相同的实例,不同请求重新创建。
    • session:在同一会话中使用相同的实例,不同会话重新创建。

3. @Primary

  • 当同一个对象有多个实例时,优先选择该实例

4. @PostConstruct

  • 用于修饰方法,当对象实例被创建并且依赖注入完成后执行,可用于对象实例的初始化操作

5. @PreDestroy

  • 用于修饰方法,当对象实例将被Spring容器移除时执行,可用于对象实例持有资源的释放

(四)SpringMVC相关注解

1. @RequestMapping(value = " ", method = RequestMethod.xx)

  • 注解在方法上或类上
  • 可用于将 Web 请求路径映射到处理类的方法上
    • 意思是,如果针对该路径发送请求,那么将会由这个方法来处理该请求
      • 例如,如果接收到GET请求 “/brand/listAll” 时,会调用该方法处理请求,在例子中时获取所有品牌信息并将结果封装为一个对象进行返回
    • URL 请求路径 —— 即端点 endpoint:
      • 指 Web 服务提供的特定资源或功能的 URL
      • 通过访问不同的端点,客户端可以与 Web 服务进行交互,执行特定的操作或获取特定的数据
      • 需要开发者自己命名定义注解中的 value 和方法名
  • 作用于类上时,可以统一类中所有方法的路由路径;作用于方法上时,可单独指定方法的路由路径;method 属性可以指定请求的方式,如GET, POST, PUT, DELETE等
    • GET 和 POST 的区别
      • GET 用于获取资源,不会对服务器上的数据产生副作用,如获取、删除
      • POST 用于创建或更新资源,有可能会改变服务器上的数据,如新建、更新
    • 如果类上定义基本URL路径为 “/brand”,此控制器类中的某个方法定义 “/listAll” 端点
      • 此控制器类中定义的所有端点将在 http://localhost:8080/brand 路径下访问
      • 该 “listAll” 端点将在 http://localhost:8080/brand/listAll 下访问
  • 特例:
    • @GetMapping
      • 用于表示GET请求方法,等价于 @RequestMapping(method = RequestMethod.GET)
    • @PostMapping
      • 用于表示POST请求方法,等价于 @RequestMapping(method = RequestMethod.POST)

2. @ResponseBody

  • 注解在方法上
  • 表明该方法的返回对象会被自动转换为 JSON 格式
  • 多与 @Controller 一起使用,自动将方法的返回值转化为适当的格式 JSON/XML,并将其写入 HTTP 响应体中返回给客户端,而不是将其作为视图解析并渲染

3. @RequestBody

  • 注解在方法的参数对象上
  • 将 请求体中的 JSON 数据 转化为 方法的参数对象
  • 多与 @PostMapping、@PutMapping 等一起使用,用于处理 POST, PUT 等请求方法
  • @PostMapping XXX xxx:
    • 会将请求体映射为 XXX 类型的 xxx 对象,从而可以直接在方法中使用该 xxx 对象来处理请求体中的数据

4. @RequestParam

  • 注解在方法的参数对象上
  • 用于从 HTTP 请求中提取参数,可以将请求中的查询参数、表单参数或路径变量映射到方法的参数上
    • 例如 @RequestParam(value = "", defaultValue = "", required = true) Integer pageNum

5. @PathVariable

  • 注解在方法的参数对象上
  • 用于从 URL 路径中提取变量值
    • 使用 @RequestrianMapping(value = "/update/{id}", method = RequestMethod.POST) 指定请求路径
    • 使用 @PathVariable("id") Long id 从路径中提取 id 的值
    • 即 如果路径为 /update/1,那么可获取到 id = 1

6. @RequestPart

  • 用于接收文件上传中的文件参数,通常是 multipart/form-data形式传入的参数

7. @RestController

  • 用于表示controller层的组件
  • 与 @Controller注解的不同在于,相当于在每个请求处理方法上都添加了 @ResponseBody注解,这些方法都将返回JSON格式数据

(五)配置相关注解

1. @Configuration

  • 用于声明一个 Java 形式的配置类,SpringBoot 推荐使用 Java 配置
  • 在该类中声明的 Bean 等配置将被 SpringBoot 的组件扫描功能扫描到

2. @EnableAutoConfiguration

  • 启用 SpringBoot 的自动化配置,
  • 会根据在 pom.xml添加的依赖和 application-dev.yml中的配置自动创建需要的配置

3. @ComponentScan

  • 启用 SpringBoot 的组件扫描功能,将自动装配和注入指定包下的Bean实例

4. @SpringBootApplication

  • 用于表示 SpringBoot 应用中的启动类
  • 相当于 @EnableAutoConfiguration@EnableAutoConfiguration和 @ComponentScan三个注解的结合体

5. @EnableCaching

  • 当添加 Spring Data Redis 依赖之后,可用该注解开启 Spring 基于注解的缓存管理功能

6. @value

  • 用于注入在配置文件中配置好的属性

7. @ConfigurationProperties

  • 用于批量注入外部配置,以对象的形式来导入指定前缀的配置

8. @Conditional

  • 用于表示当某个条件满足时,该组件或 Bean 将被 Spring 容器创建

  • 常用的条件注解有:

    • @ConditionalOnBean:当某个 Bean 存在时,配置生效

    • @ConditionalOnMissingBean:当某个 Bean 不存在时,配置生效

    • @ConditionalOnClass:当某个类在 Classpath 存在时,配置生效

    • @ConditionalOnMissingClass:当某个类在 Classpath 不存在时,配置生效

(六)数据库事务相关注解

1. @EnableTransactionManagement

  • 启用 Spring 基于注解的事务管理功能
  • 需要和@Configuration注解一起使用

2. @Transactional

  • 表示方法和类需要开启事务
  • 当作用与类上时,类中所有方法均会开启事务
  • 当作用于方法上时,方法开启事务,方法上的注解无法被子类所继承

(七)SpringSecurity相关注解

1. @EnableWebSecurity

  • 启用 SpringSecurity 的Web功能

2. @EnableGlobalMethodSecurity

  • 启用 SpringSecurity 基于方法的安全功能,
  • 当使用 @PreAuthorize修饰接口方法时,需要有对应权限的用户才能访问

(八)全局异常处理注解

1. @ControllerAdvice

  • 常与@ExceptionHandler注解一起使用
  • 用于捕获全局异常,能作用于所有 controller 中

2. @ExceptionHandler

  • 修饰方法时,表示该方法为处理全局异常的方法

(九)AOP相关注解

1. @Aspect

  • 用于定义切面,切面是通知和切点的结合,定义了何时、何地应用通知功能

2. @Before

  • 表示前置通知(Before)
  • 通知方法会在目标方法调用之前执行
  • 通知描述了切面要完成的工作以及何时执行

3. @After

  • 表示后置通知(After)
  • 通知方法会在目标方法返回或抛出异常后执行

4. @AfterReturning

  • 表示返回通知(AfterReturning)
  • 通知方法会在目标方法返回后执行

5. @AfterThrowing

  • 表示异常通知(AfterThrowing)
  • 通知方法会在目标方法返回后执行

6. @Around

  • 表示环绕通知(Around)
  • 通知方法会将目标方法封装起来,在目标方法调用之前和之后执行自定义的行为

7. @Pointcut

  • 定义切点表达式,定义了通知功能被应用的范围

8. @Order

  • 用于定义组件的执行顺序,在AOP中指的是切面的执行顺序,value属性越低优先级越高

(十)AOP相关注解

1. @SpringBootTest

  • 用于指定测试类启用 Spring Boot Test 功能,默认会提供 Mock 环境

2. @Test

  • 指定方法为测试方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值