Springboot常用注解总结

• 项目配置注解

1、@SpringBootApplication 注解

@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。

这三个注解的作用分别为:

  • @SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
  • @EnableAutoConfiguration:是自动配置的注解。
  • @ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。

2、@Configuration:一般声明配置类,使用@Component或者@Configuration

3、@Bean:Bean对象注册Spring IOC容器与使用bean对象是整个Spring框架的重点,其中@Bean就是一个将方法作为Spring Bean对象注册的一种方式。

4、@Scope:****声明Spring Bean**的作用域@Scope("singleton")

Spring Bean的5种作用域:

  • singleton 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。
  • prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。
  • request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。
  • session 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。
  • application 限定一个Bean的作用域为ServletContext的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。

• controller 层注解

1、****@Controller 表明这个类是一个控制器类,和@RequestMapping来配合使用拦截请求,如果不在method中注明请求的方式,默认是拦截get和post请求。这样请求会完成后转向一个视图解析器。因为前后端会做分离,所以请求后端只关注数据处理,后端返回json数据的话,需要配合@ResponseBody注解来完成。

@RestController 是@Controller 和@ResponseBody的结合,一个类被加上@RestController 注解,数据接口中就不再需要添加@ResponseBody。更加简洁。同样的情况,@RequestMapping(value="",method= RequestMethod.GET ),我们都需要明确请求方式。这样的写法又会显得比较繁琐,于是乎就有了如下的几个注解。

@RequestMapping(value=“”,method = RequestMethod.GET) @GetMapping(value =“”)

@RequestMapping(value=“”,method = RequestMethod.POST) @PostMapping(value =“”)

@RequestMapping(value=“”,method = RequestMethod.PUT) @PutMapping(value =“”)

@RequestMapping(value=“”,method = RequestMethod.DELETE) @DeleteMapping(value =“”)

2、@CrossOrigin: **@CrossOrigin(origins = "", maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个controller配置启用跨域,也可以在方法级别启用。

3、@Autowired: spring的自动装配,这个个注解可以用到构造器,变量域,方法,注解类型上。当我们需要从bean 工厂中获取一个bean时,Spring会自动为我们装配该bean中标记为@Autowired的元素。

4、@Resource:****@Resource和@Autowired一样都可以用来装配bean,都可以标注字段上,或者方法上。 @resource注解不是spring提供的,是属于J2EE规范的注解。@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配。**

**5、@EnablCaching:****@EnableCaching: 这个注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。其作用相当于spring配置文件中的cache manager标签。

前后端传值@ParhVariable和@RequestParam

params:指定request中必须包含某些参数值是,才让该方法处理。

@RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10"})
public String testParamsAndHeaders() {
System.out.println(``"testParamsAndHeaders");
return "SUCCESS";
}

params 只是判断url 或者 form data 中的参数是否复合params的定义,并不会直接绑定数据到方法的参数中!

@PathVariable:路径变量注解。绑定路径中的占位符参数到方法参数变量中;只能绑定路径中的占位符参数,且路径中必须有参数。

无论是 GET 或者POST 只要 URL中有参数即可!

【注意】如果URL中无参数,将会出错;如果URL有参数,但是没有使用@PathVariabl该注解,那么URL的参数不会默认与方法参数绑定!方法里的参数会默认绑定表单里面对应的参数!

@RequestParam: 该注解相关属性如下:

  • value:参数key,可以不写,默认为"";
  • name:和value作用一样;
  • required:默认值为true,可以不写;
  • 获取URL或者 form data 中的参数

【注意】GET中的参数形式为:username=tom&age=11&sex=boy;POST中的参数形式为:以键值对形式保存在form data

@RequestBody: 用于读取Request请求的body部分,且Content-Type为application/json格式数据,接收到数据后会自动将数据绑定在Java对象上,系统会使用HttpMessageConverter来讲请求的body中的json字符串转换为Java对象

@RequestMapping("/getUserById/{name}")
public User getUser(@PathVariable("name") String userName){
return userService.selectUser(userName);
}
@GetMapping("/users/{userId}/teachers")
public List<Teacher> getUserRelatedTeachers(@PathVariable("userId") Long userId,@RequestParam(value = "type",required = false) String type){
...
}

• servcie层注解

1、@Service:这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给spring容器。事务的切面也会配置在这一层。

• DAO层注解

1、@Repository:@Repository注解类作为DAO对象,管理操作数据库的对象。

总得来看,@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。通过这些注解的分层管理,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。所以我们在正常开发中,如果能用@Service, @Controller, @Repository其中一个标注这个类的定位的时候,就不要用@Component来标注。

• 配置文件注解

dog: keji
my-profile:
name: xiaoming
email: 11111@163.com library:
location: hubei
books:
- name: honglou
description: honglou
- name: sanguo
description: sanguo

@Value:首先是使用@Value("${property}")读取简单的配置信息

@Value("${dog}")
String dog;

@ConfigurationProperties: 我们同样可以通过@ConfigurationProperties读取配置信息并与bean绑定

@Component
@ConfigurationProperties(prefix = "library")
class LibraryProperties{
@NotEmpty
private String location;
private List<Book> books;
@Data
@ToString
static class Book{
String name;
String description;
}
}

• 异常处理注解

@ControllerAdvice :实现全局异常处理,只需要定义类。

使用这个 Controller ,可实现三个方面的功能,因为这是SpringMVC提供的功能,所以可以在springboot中直接使用:

  • 全局异常处理 (@ExceptionHandler)
  • 属性编辑器 (@InitBinder)
  • 全局数据 (@ModelAttribute)

@ExceptionHandler:针对哪一种异常进行处理

@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView customException(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("message",e.getMessage());
mv.setViewName("error");
return mv;
}
}

在该类中可以定义多个异常处理方法,不同方法处理不同的异常,例如空指针、数据越界、非法参数异常等;@ExceptionHandler 注解用来指明异常的处理类型,即如果这里指定为 NullpointerException,则数组越界异常就不会进到这个方法中来。

@ModelAttribute: 全局数据

全局数据绑定功能可以用来做一些初始化的数据操作,可以将一些公共数据定义在添加了 @ControllerAdvice 注解的类中,从而在每一个 Controller 的接口中,就都能够访问导致这些数据,定义如下:

@ControllerAdvice
public class GlobalExceptionHandler1{
@ModelAttribute(name = "keji")
public Map<String,Object> data(){
HashMap<String, Object> map = new HashMap<>();
map.put("age", 18);
map.put("sex", "男");
return map;
}
}

使用 @ModelAttribute 注解标记该方法的返回数据是一个全局数据,默认情况下全局数据的 key 就是返回的变量名,value 就是方法返回值,开发者可以通过 @ModelAttribute 注解的 name 属性去重新指定 key

• 事务注解

数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。springboot中只需要在方法上加上@Transactional注解,该方法即可成为一个事务。

Springboot笔记<10>常用注解总结的更多相关文章

  1. springboot中的常用注解

    springboot中的常用注解个人觉得springboor中常用的注解主要可以分为三种:放入容器型注解.从容器中取出型注解和功能型注解.其中的放入容器型和从容器中取出型就是我们平时所说的控制反转和依 ...

  2. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mappe ...

  3. springBoot、SpringCloud 常用注解

    1,@SpringBootApplication是springboot启动类的入口注解,标注在主启动类上:2,@EnableEurekaServer 是eureka服务端启动,接受其他服务注册进来,标 ...

  4. Springboot入门及常用注解

    1.微服务:一个项目 可以由多个 小型服务构成(微服务)2.spring boot可以快速开发 微服务模块 a.简化j2ee开发 b.整个spring技术栈的整合(整合springmvc spring ...

  5. SpringBoot学习之常用注解

    @SpringBootAppliaction:通常注解写在SpringBoot启动类中,主要包括三个作用: 1.@Configuration表示将该类作用springboot配置文件类. 2.@Ena ...

  6. springboot笔记10——整合Redis

    依赖 <dependencies> <!--web依赖--> <dependency> <groupId>org.springframework.boo ...

  7. Spring/SpringBoot常用注解总结

    转自:[Guide哥] 0.前言 可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我都说了具体用法,掌握搞懂,使 ...

  8. SpringBoot+Spring常用注解总结

    为什么要写这篇文章? 最近看到网上有一篇关于 SpringBoot 常用注解的文章被转载的比较多,我看了文章内容之后属实觉得质量有点低,并且有点会误导没有太多实际使用经验的人(这些人又占据了大多数). ...

  9. 菜鸟的springboot常用注解总结

    菜鸟的springboot常用注解总结 0.前言 可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我都说了具体用 ...

  10. SpringBoot常用注解大全

    常用注解概览 这里整理了一张SpringBoot常用注解的思维导图,本文主要讲解这些注解的用法. 组件相关注解 @ComponentScan 默认扫描当前包及其子包下面被@component,@Con ...

随机推荐

  1. arco-design-pro-vite项目配置参考

    参考地址 配置源码地址:https://github.com/arco-design/arco-design-pro-vue/blob/main/arco-design-pro-vite/ 按钮组件 ...

  2. Golang 入门 : Go语言介绍

    简介 Go 语言又称 Golang,由 Google 公司于 2009 年发布,近几年伴随着云计算.微服务.分布式的发展而迅速崛起,跻身主流编程语言之列,和 Java 类似,它是一门静态的.强类型的. ...

  3. 【Maven】仓库

    在 Maven 的术语中,仓库是一个位置(place). Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库. 在 Maven 中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件 ...

  4. ThreadLocal 内存泄漏原因和解决方法

    一.ThreadLocal 内存泄漏的原因 ThreadLocal 的内存泄漏问题主要与其底层实现 ThreadLocalMap 的结构和垃圾回收机制有关.以下是核心原因: 1.ThreadLocal ...

  5. Mybatis的*Dao.XML中的配置与其对应的接口、resultMap的运用

    例子. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC &quo ...

  6. 使用注解的方式编写:@Aspect运用

    列子. public interface Calculator { // 加 public int add(int i,int j); // 减 public int sub(int i,int j) ...

  7. MCP Server Java 开发框架的体验比较(spring ai mcp 和 solon ai mcp)

    目前已知的两个 mcp-server java 应用开发框架(ID类的,封装后体验都比较简洁): spring-ai-mcp,支持 java17 或以上 solon-ai-mcp,支持 java8 或 ...

  8. 有的时候,需要利用UserControl占位模板,动态替换的情况,绑定后无法获取DataContext的问题

    有的时候,需要利用UserControl占位模板,动态替换的情况,绑定后无法获取DataContext的问题,特此备注下 效果如下: 关键的地方是,下面第3行,需要把当前的上下文传递到Content, ...

  9. php获取前一天,前一个月,前半年,前一年的时间戳

    #获取前一小时strtotime("-1 hour") #获取前一天strtotime("-1 day") #获取前一周strtotime("-1 w ...

  10. Quartz.Net定时任务

    参照: [项目升级]集成Quartz.Net Job实现(一) - 腾讯云开发者社区-腾讯云 (tencent.com) Quartz分布式任务调度 - 掘金 (juejin.cn) 基本概念: Qu ...