SpringBoot 常用注解简单总结
终于有时间对刚学的SpringBoot注解总结一下了,Annotation(注解)是JDK 5.0之后及以后版本引入的,这个时候需要在Spring中申明一个Bean,只能通过xml的方式,非常繁琐。但是不能通过这一点来区分是使用注解还是使用xml形式,使用注解虽然简便,极大的缩小了代码量,对于使用注解,我们会发现它和代码相关度很高结婚的很紧密,对于使用xml配置方式,我们会发现它和代码紧密程度不是很高,跟适合用来做全局的,与代码紧密度不高的,全局配置。它可以创建文档,跟踪代码的依赖性,甚至执行基本编译时检查。注解通常是一“@注解名”在代码中存在的,根据注解的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。他们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制变成实现对这些元数据的访问。另外,你也可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件中。
- 采用注解也有好多的优势:
- 采用纯java代码,不再需要配置繁杂的xml文件
- 在配置中也可以享受面向对象带来的好处
- 类型安全对重构可以提供良好的支持
- 减少复杂配置的同时还可以享受到Spring IOC 容器提供的功能
@Controller
注解在一个类上,表示将这一个类标注为用来接收HTTP请求的控制器,也是视图层直接访问的接口集合
@RequestMapping
注解在一个类上,或者某一方法上面,注解将特定的URL和具体的控制器类或控制器类类中的方法绑定
当注解在类上时@RequestMapping(value="/pssc_doc_ups/TestController")
当表标注在方法上时@RequestMapping(value="/getUserList",mothed=RequestMethod.GET) 表示请求名称为getUserList,请求方法为get方法,当在后面不写method时默认为get方法,也可以不写,这时候我们写的这个接口在前端访问方式就是http://127.0.0.1/pssc_doc_ups/TestController/getUserList
但是看着好像还是有点复杂,这个时候出来下面两个注解
@GetMapping
注解在方法上,@RequestMapping(value="/getUserList",mothed=RequestMethod.GET)
@PostMapping
注解在方法上,@RequestMapping(value="/getUserList",mothed=RequestMethod.POST)
1 @Controller 2 //标注此类为控制层,规定接受HTTP请求并返回响应格式 3 @RequestMapping(value="/pssc_doc_ups/TestController") 4 //标注视图层访问此接口,与对应方法绑定,此类方法请求前必须加对于value 5 public class TestController() { 6 7 @RequestMapping(value="/getUserList",mothed=RequestMethod.GET) 8 public List<test> getUserList(){ 9 return // 10 } 11 }
@ResponseBody
注解在方法上,表示此方法的返回数据直接写入HTTP response body里面,一般在异步获取数据时使用,用于构建RESTful的api,在前后端分离的项目中一般都会使用@ResponseBody,因为无需跳转页面,使用此注解后,不管返回什么类型的数据都会以json响应,除了返回String类型返回的还是String,一般配合@RequestMapping使用,通俗的将就是返回的是数据而不是页面。
@RestController
注解在一个类上,看样子好像是@Controller的高配版,是个特殊类,@Controller ⊆ @RestController,大概是这样的关系吧。有没有一种情况,当我们在一个类上标注了注解@Controller之后,这个类的所有方法都是标注@ResponseBody,即都是返回的数据格式,控制器没有参与页面跳转,只是负责请求返回,这个时候我们就可以用@RestController来代替@Controller和@ResponseBody了,即直接在类上使用@RestController注解表示此类所以方法为返回JSON数据,一般也用在前后端分离的后端项目上。大概理解为@RestController = @Controller + @ResponseBody
@PathVariable
注解在方法上,可以表示为在请求的URL中得到请求的参数值,比如我们访问接口
http://127.0.0.1/pssc_doc_ups/TestController/getUserList/00001
我们在后端可以这样,即将URL中的变量作为参数
@Controller
@RequestMapping(value="/pssc_doc_ups/TestController")
publicclass TestController { @RequestMapping(value="/getUserList/{userId}",method = RequestMethod.GET)
public String getLogin(@PathVariable("userId") String userId){
System.out.println("User Id : " + userId);
}
}
@RequestParam
注解用在参数上,一般用来接受请求的参数,例如访问接口
http://127.0.0.1/pssc_doc_ups/TestController/getUserList?userId=00001
我们在后端可以这么写
@Controller @RequestMapping(value="/pssc_doc_ups/TestController") public class TestController { @RequestMapping(value="/getUserList",method = RequestMethod.GET) public String getLogin(@RequestParam("userId") String userId){ System.out.println("User Id : " + userId); } }
@RequestBody
注解在参数上,表示请求体,当前端需要给后端传递多个参数时,不能写十个@RequestParam一个一个来接受吧,把前端数据封装了之后直接使用注解@ResponseBody来表示用一个对象来接受这个参数,可以是数组,Map等等
好了,上面这些注解一般用在控制层的比较多,在业务层也有一些注解:
@Service
注解在一个类上,必须要有的,相当于xml配置中的bean id = service,service一般用来负责将一个bean注册到spring上下文中,可以直接使用注解@Service,也可以使用@Service("serviceName")来具体指定
@Autowired
使用率高达80%的一个注解,一般都会用,可以对类成员变量,方法及构造函数进行标注完成自动装配的工作
@Qualifier
当使用注解@Autowired之后,自动装配为bean,但是当找到两个一样的bean之后会抛出异常,无法起来项目,需要使用注解@Qualifier来指定唯一,一般配合@Autowired来使用。@Qualifier(" ")里边为指定的唯一名
还有好多的注解...比如jpa里面,实体类@Column,@Target等等,还有spring boot启动类上面的一些。由于 使用的是公司的外网机器,没有装配IDEA,代码举得例子少了一些,如有一些错误欢迎大佬们骚扰我,骚扰我。。