常用的Spring注解
1. @Controller
- 被@Controller标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类。
- 将@Controller标记在某个类上,配合@RequestMapping注解,可以在一个类中定义多个接口,这样使用起来更加灵活。
- 参考资料:https://blog.csdn.net/Colton_Null/article/details/79187414
2. @ResponseBody
- 用在控制层(controller层)的方法上
- @ResponseBody注解的作用是将Controller的方法返回的对象通过适当的转换器转换为指定格式之后,写入到response对象的body区,通常用来返回json或者xml数据。在使用这个注解之后就不会再走视图处理器,而是直接将数据写入输出流中,效果等同于通过response对象输出指定格式的数据。
- controller方法在使用@RequestMapping之后,返回值通常解析为跳转路径,但是加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@ResponseBody后,会直接返回json数据。@ResponseBody将HTTP请求正文插入方法中,使用合适的HttpMessageConverter将请求体写入某个对象。
- @ResponseBody可以作用在controller的方法上,也可以直接作用在类上,最典型的例子就是@RestController这个注解,它就包含了@ResponseBody注解,和作用在方法上的用处是一样的,只是作用在类上就不需要每个方法都加上这个注解了,减少了代码的冗余。
- 参考资料:http://www.yuanjingyan.com/article/1643899137
- @ResponseBody使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用; 参考资料:https://developer.aliyun.com/article/248017
3. @RestController
- 在Spring中@RestController的作用等同于@Controller + @ResponseBody 注解。
- 参考资料:https://www.hxstrive.com/subject/spring_boot.htm?id=326
4. @RequestMapping
- 被@RequestMapping标记的方***被分发处理器扫描识别,将不同的请求分发到对应的接口上。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。要配置 Web 请求的映射,就需要你用上@RequestMapping 注解
- controller方法在使用@RequestMapping之后,返回值通常解析为跳转路径,但是加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。
- 参考资料:https://www.oschina.net/translate/using-the-spring-requestmapping-annotation
5. @PostMapping
- @PostMapping:Spring MVC的注解,处理post请求,类似的注解还有:
- @GetMapping,处理get请求
- @PutMapping,处理put请求
- @DeleteMapping,处理delete请求
- 参考资料:https://blog.csdn.net/nangeali/article/details/82470201
6. @RequestBody
- @RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。
- 参考资料:https://blog.51cto.com/u_3664660/3216992
7. @mapper
- @mapper是Mybatis的注解,使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。
- 如果Mapper.xml与Mapper.class在同一个包下且同名,spring扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配到Mapper.class。
- 如果Mapper.xml与Mapper.class不在同一个包下或者不同名,就必须使用配置mapperLocations指定mapper.xml的位置。
此时spring是通过识别mapper.xml中的 <mapper namespace="(例如)com.huang.mapper.UserDao"> namespace的值来确定对应的Mapper.class的。
参考资料:https://blog.csdn.net/qq_34626094/article/details/114582315</mapper>
8. @Component
- @Component是Spring的基础注解,表示一个 JavaBean 可以被注入到 Spring 容器中(把普通pojo实例化到spring容器中)。
web服务的三层结构对应的Spring注解有: - @Controller 用在表现层,对来自前端的请求进行转发处理与重定向。
- @Repository 用在持久层,标注 DAO 类,表示这个类可以对数据库进行数据的读取或者写入。
- @Service 用在业务层,用来处理业务逻辑。
引入三个注解之后,就实现了将处理前端请求、处理业务逻辑、处理数据库读写这三个基本任务进行了解耦,方便程序的编写和项目维护。
参考资料:https://blog.csdn.net/khxu666/article/details/82903108