导语:最近在做项目的时候,遇到了很多作用类似的注解,但是又不知道准确的区别,于是整理了一些Spring注解,方便以后回顾。(持续更新...)
Spring Bean相关
1. @Controller、@Service、@Repository、@Component
作用: 把类标识成可用于 @Autowired注解自动装配的 bean 的类。
- @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
- @Service: 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
- @Repository: 对应持久层即 Dao 层,主要用于数据库相关操作。
- @Component :通用的注解,可标注任意类为 `Spring` 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
2. @Autowired 和@Resource
作用: 自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。
- @ Resource 按照名称进行匹配 ;@Autowired 按照类型进行匹配
- @ Resource 是java的一个注解 ; @Autowired 是spring的注解
3. @Configuration
- 一般用来声明配置类,可以使用 @Component注解替代,不过使用@Configuration注解声明配置类更加语义化。
@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}
}
4. @Scope
声明 Spring Bean 的作用域,使用方法:
@Bean
@Scope("singleton")
public Person personSingleton() {
return new Person();
}
四种常见的 Spring Bean 的作用域:
- singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
- prototype : 每次请求都会创建一个新的 bean 实例。
- request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
- session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。
Controller 相关
1. @RestController(组合注解)
- @RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,是 REST 风格的控制器。
- 单独使用 @Controller不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的 Spring MVC 的应用,
- 对应于前后端不分离的情况。@Controller +@ResponseBody返回 JSON 或 XML 形式数据
2. @RequestMapping(方法上)
作用:可作用与 类 或者 方法。
- 作用于类,代表类可以处理的url路径。@RequestMapping("/admin/investigationQuestionnaireInfo")
- 作用于方法,代表可以类+方法的组合url路径。@RequestMapping("test")
tips : 作用于方法可以不加参数
3. @RequestMapping 和 @GetMapping @PostMapping 区别(方法上)
- 后两者组合注解,@RequestMapping(method = RequestMethod.GET/POST)的缩写
- @RequestMapping默认都get post都支持
4. @ResponseBody(方法上)
- 作用:将要返回给前端的java对象数据转为json格式或者xml格式的数据,写入到response对象的body区
- 不加:
- 1.通过model返回数据,即视图的形式
- 2.方法作为前端页面跳转的中介
5.@Requestbody(方法参数)
- 作用:当前端参数是通过json格式或者xml格式传过来的时候用(ajax提交),会将json格式参数绑定到一个java对象上,且一个方法只能有一个Requestbody
- 适用场景:当前端传参格式特别复杂,包含嵌套,或者对象数组的时候使用
6.@PathVariable(方法参数)
- 作用:接收url中占位符{ }的值并绑定到方法的某个参数上,用于获取路径参数
@RequestMapping("show5/{id}/{name}")
public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){}
7.@RequestParam(方法参数)
- 作用:将接收的参数绑定到方法的某个参数上
@RequestMapping
public ModelAndView test5(@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)){}
- 用与不用的区别:
- 用,即能获取url上的参数,又能获取form表单的参数(可设置参数别名,必须与否,默认值)
- 不用,只能获取url上的参数(可以不传参数,url传参必须与方法参数名一致)