Spring中常见的注解收集

文章目录

  • Spring中常见的注解收集
    • 1.@ResponseBody
    • 2.@RequestBody
    • 3.@RequestParam
    • 4.@Controller
    • 5.@RestController
    • 6.@PathVariable
    • 7.@RequestPart
    • 8.@RequestHeader
    • 9.@CookieValue
    • 10.@ModelAttribute
    • 11.@RequestMapping
    • 12.@validated
    • 13.@Value
    • 14.@DateTimeFormat和@JsonFormat
    • 15.@Bean
    • 16.@AutoWire
    • 17.@Lazy
    • 18.@Component
    • 19.@Scope
    • 20.@Primary
    • 21.@Configuration
    • 22.@Service
    • 23.@Repository
    • 24.@PostConstruct和@PreDestroy
    • 25.@ComponentScan
    • 26.@CrossOrigin
    • 27.@SpringBootTest和@RunWith(SpringRunner.class)和@Test
    • 28.@SpringBootApplication

1.@ResponseBody

不管前端传来的方式是什么,如果要让后端的结果告知前端,并且是采用的json格式给前端,必须加上@ResponseBody注解,否则,前端接受不到结果,报404错。

2.@RequestBody

如果前端传给后端的是一个json格式的数据,后端接受,一定要加上@RequestBody,否则后端识别不了前端的json数据,会导致后端接受的所有参数值为null。

3.@RequestParam

前端给后端传数据是get或post方式,比如表单提交的多个数据,并不是json格式,当出现前端数据属性名和后端接受的数据属性名不一致时,使用@RequestParam注解取别名,使其成功映射。

4.@Controller

告诉spring框架,当前的@Controller下边的类是处理器(这里sping中处理器非常多,我们写的是后端控制器处理器),也就是我们日常写后端接口和前端对接的类。

5.@RestController

@RestController注解是@Controller注解和@ResponseBody注解的结合体,就是使用了该注解,后边后端返回给前端的数据是json格式,不用再加@ResponseBody注解,自动采用json格式给前端。

6.@PathVariable

Url路径参数注解@PathVariable一般用于restful风格传参的时候拿到路径参数,可以给路径参数取别名来保证前后端参数名不一致能成功映射。

7.@RequestPart

@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的。
与@RequestParam比较:@RequestParam也同样支持multipart/form-data请求。
他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候,@RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)。

8.@RequestHeader

通过@RequestHeader注解拿到请求头的信息,比如想拿到内容的数据类型信息,使用@RequestHeader(name = “Content-Type”) String contentType就可获取。

9.@CookieValue

通过@CookieValue注解获取Cookie值,比如获取Cookie中sessionId信息,@CookieValue(name = “JSESSIONID”) String sessionId就可获取。

10.@ModelAttribute

在一个控制器(使用了@ControllerSpring组件)中,如果存在一到多个使用了@ModelAttribute的方法,这些方法总是在进入控制器方法(方法上有@RequestMapping相关注解)之前执行,并且执行顺序是由加载顺序决定的(具体的顺序是带参数的优先,并且按照方法首字母升序排序)。

11.@RequestMapping

@RequestMapping注解是@GetMapping,@PostMapping,@PutMapping,@DeleteMapping等注解的结合体,也就是@RequestMapping可以替代上边所有注解,而具体使用那个注解的功能需要根据当前方法的参数相关信息,比如,前端以get方式传来参数,这时就相当于@GetMapping注解。

12.@validated

用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。

使用举例:

@RequestMapping(value="/url.json",method= {RequestMethod.POST})
@ResponseBody
@Transactional
public Result<?> xxmethod( @RequestBody @Validated  XoPO xoPo)     throws ParseException, UnsupportedEncodingException {}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、@data
public class XoPO{@validatedprivate List<OrderPerson> personList;@NotNull@Size(max=32,message="code is null")private String code;@NotBlank@Size(max=32,message="product is null")private String product;
}

常用的检查类的注解类型

@AssertFalse 校验false
@AssertTrue 校验true
@DecimalMax(value=,inclusive=) 小于等于value,
inclusive=true,是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull  检查Null
@Past  检查日期
@Pattern(regex=,flag=)  正则
@Size(min=, max=)  字符串,集合,map限制大小
@Validate 对po实体类进行校验

13.@Value

使用@Value注解可以拿到不是请求体中的数据源的数据,也就是说可以拿到上下文中已经加载和处理完成的环境属性值,比如拿到配置文件中的某个参数值,如文件上传,拿到配置文件中存储的路径信息。

14.@DateTimeFormat和@JsonFormat

这两个注解主要用于时间格式处理。

@DateTimeFormat注解配合@RequestBody的参数使用的时候,会发现抛出InvalidFormatException异常,提示转换失败,这是因为在处理此注解的时候,只支持Form表单提交(Content-Typex-www-form-urlencoded`)。

案例:

@PostMapping(value = "/date2")
public String date2(@RequestParam("name"="userId")String userId,@RequestParam("name"="birthdayTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime birthdayTime,@RequestParam("name"="graduationTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime graduationTime) {return "success";
}//或者先在实体类中给定时间格式规则
@Data
public class UserDto2 {private String userId;@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime birthdayTime;@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime graduationTime;
}@PostMapping(value = "/date2")
public String date2(UserDto2 userDto2) {log.info(userDto2.toString());return "success";
}

@JsonFormat注解可使用在Form表单或者JSON请求参数的场景,因此更推荐使用@JsonFormat注解,不过注意需要指定时区(timezone属性),可能出现时差。

案例:

@PostMapping(value = "/date2")
public String date2(@RequestBody UserDto2 userDto2) {log.info(userDto2.toString());return "success";
}@Data
public class UserDto2 {private String userId;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private LocalDateTime birthdayTime;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private LocalDateTime graduationTime;
}

15.@Bean

@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。

SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。

16.@AutoWire

@AutoWire注解的方法表示自动装配的类型,返回一个Autowire类型的枚举
Autowired 有两种 注入方式 by type 和by name , 默认使用的是byType的 方式 向Bean里面 注入 相应的Bean。
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。

17.@Lazy

表明一个bean 是否延迟加载,可以作用在方法上,表示这个方法被延迟加载;可以作用在@Component (或者由@Component 作为原注解) 注释的类上,表明这个类中所有的bean 都被延迟加载。如果没有@Lazy注释,或者@Lazy 被设置为false,那么该bean 就会急切渴望被加载;

18.@Component

@Component注解标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的

19.@Scope

Scope Descriptionn
singleton 默认单例的bean定义信息,对于每个IOC容器来说都是单例对象
prototype bean对象的定义为任意数量的对象实例
request bean对象的定义为一次HTTP请求的生命周期,也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的。仅仅在web-aware的上下文中有效
session bean对象的定义为一次HTTP会话的生命周期。仅仅在web-aware的上下文中有效
application bean对象的定义为WebSocket的生命周期内。仅仅在web-aware的上下文中有效
websocket bean对象的定义为WebSocket的生命周期内。仅仅在web-aware的上下文中有效

20.@Primary

  • 作用:指示当多个候选者有资格自动装配依赖项时,应优先考虑bean。
  • 与@Bean 一起使用,定义在方法上,方法级别的注解
  • 与@Component 一起使用,定义在类上,类级别的注解

案例:

@Configuration
public class AppConfigWithPrimary {@Beanpublic MyBean myBeanOne(){return new MyBean();}@Bean@Primarypublic MyBean myBeanTwo(){return new MyBean();}
}
//上面代码定义了两个bean ,其中myBeanTwo 由@Primary 进行标注,表示它首先会进行注册

21.@Configuration

@Configuration注解是环境配置注解,告诉spring当前的类是一个环境配置类

22.@Service

@Service注解表示 service服务层(注入dao)

23.@Repository

@Repository注解表示dao层持久层

24.@PostConstruct和@PreDestroy

作用:方法初始化和销毁

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。

加载的顺序:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rztiYS8E-1641530611951)(D:\typora_img_source\image-20220107121651751.png)]

案例:

//对象创建并赋值之后调用
@PostConstruct
public void init() { System.out.println("对象创建并赋值之后调用...");
}//容器移除对象之前
@PreDestroy
public void detory(){System.out.println("容器移除对象之前执行...");

25.@ComponentScan

@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中

26.@CrossOrigin

当出现跨域问题,一般在Controller层的类上加@CrossOrigin跨域注解可以解决跨域。

27.@SpringBootTest和@RunWith(SpringRunner.class)和@Test

@SpringBootTest和@RunWith(SpringRunner.class)和@Test这三个注解都是单元测试注解,@RunWith(SpringRunner.class)注解告诉spring要加载配置文件,在容器中启动单元测试

28.@SpringBootApplication

@SpringBootApplication注解告诉spring这是一个项目启动入口类

上边的注解是我日常见到的注解,一些注解解释是借鉴的其他博主写的,后续会继续完善内容

参考:

深入理解spring注解之@ComponentScan注解 - 星朝 - 博客园 (cnblogs.com)

@Bean 注解全解析 - 程序员cxuan - 博客园 (cnblogs.com)

Spring注解之@validated的使用 - 山高我为峰 - 博客园 (cnblogs.com)

(50条消息) Spring 注解面面通 之 @RequestPart_键盘上流淌的日子-CSDN博客_requestpart注解

Spring中常见的注解收集相关推荐

  1. Spring中的@Value注解详解

    本文主要介绍Spring @Value 注解注入属性值的使用方法的分析,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的参考学习价值 文章目录 概述 使用方式 基于配置文件的注入 基于 ...

  2. Spring中利用java注解声明切面

    Spring中利用java注解声明切面 第一步:确定在Spring的XML文件中包含AOP的命名空间: 第二步:在Spring的XML文件中输入<aop:aspectj-autoproxy/&g ...

  3. Spring中常见的设计模式

    Spring中常见的设计模式 1.Java设计模式 设计模式(Design Pattern)是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及安全性 ...

  4. Spring 中的各种注解,光会用可不够哦!

    来源:https://digdeep.cnblogs.com/digdeep/p/4525567.html 1. Java中的注解 2. 使用 元注解 来自定义注解 和 处理自定义注解 3. spri ...

  5. 详细讲解Spring中的@Bean注解

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/weixin_42140261/ article/details/104864333 随着SpringBoot的流行,我们现在更 ...

  6. Spring中的@ConditionalOnProperty注解

    1.概述 介绍@ConditionalOnProperty注解的主要目的. 2.@ConditionalOnProperty的目的 通常,在开发基于Spring的应用程序时,可能需要根据配置属性的存在 ...

  7. Spring中如何使用注解来配置Bean?有哪些相关的注解?

    首先需要在Spring配置文件中增加如下配置: <context:component-scan base-package="org.example"/> 然后可以用@C ...

  8. 在spring中使用自定义注解注册监听器

    2019独角兽企业重金招聘Python工程师标准>>> 接口回调 监听器本质上就是利用回调机制,在某个动作发生前或后,执行我们自己的一些代码.在Java语言中,可以使用接口来实现. ...

  9. 五、Spring中的@Import注解

    一.使用@Import注解导入组件 @Import注解的作用是给容器中导入组件,回顾下我们给容器中导入组件的方式,可以通过Spring的xm配置方式,可以通过注解,如@Component等,也可以通过 ...

最新文章

  1. Leangoo卡片和列表完成状态上线
  2. C#_汉字与GBK,Unicode,UTF-8编码之间的转换
  3. python 画风场 scipy_Python数据分析及可视化实例之Scipy
  4. linux ftp匿名只能下载,04. 创建匿名用户能够上传下载,或只能下载的目录
  5. 常见笔顺错误的字_最全汉字笔顺正确写法,建议家长为孩子收藏
  6. 智能一代云平台(二十一):生产环境Nginx报 502 Bad Gateway 问题复现及解决方案
  7. css中的背景、边框、补丁相关属性
  8. Service 中的 onStart 和 onStartCommand
  9. mfc响应鼠标前进后退按键_诚意升级,商务大鼠再临:雷柏MT750S多模无线激光鼠标评测...
  10. 【滤波器设计】基于matlab GUI窗函数法高通+低通+带通带阻FIR滤波器设计【含Matlab源码 072期】
  11. php 制作通讯录,PHP 制作通讯录(五)
  12. wangEditor富文本实现导入word功能
  13. 解决宿舍路由器校园网共享登陆问题
  14. 计算机与控制工程学院用英语怎么说,计算机与控制工程学院副院长童向荣老师2017年开学典礼致辞...
  15. 如何群发邮件不进垃圾邮箱?群发邮件进了垃圾箱怎么办?
  16. 洛谷 P1823 [COI2007] Patrik 音乐会的等待
  17. 相机的ISO设置是什么?
  18. Windows XP超强50招
  19. 贴吧引流效果怎么样?当机会来了你在做什么?
  20. 【柔性制造】工业机器人实现柔性制造离不开的核心部件

热门文章

  1. Java 编码规范1(编程规约-命名风格)
  2. 基础架构、基础服务、基础平台、基础中间件等等
  3. 拜耳扫地机器人_realme真我旅行箱发布 37L超大容量拜耳材质售299元
  4. 如何管理数百个微服务并避免踩坑?
  5. MFC LNK 2005错误
  6. 怎样解决在Word中插入公式后行距变宽了
  7. ios视频通话三方_iOS基于Socket.io即时通讯IM实现,WebRTC实现视频通话
  8. ARMv8之arm64架构汇编知识
  9. c语言中获取当前时间的函数
  10. go语言有类似注解的东西吗_go语言注释