SpringBoot常用注解

SpringBoot常用注解

  springboot中摒弃了spring以往项目中大量繁琐的配置,遵循“约定大于配置”的原则,通过自身默认配置极大地降低了项目搭建的复杂度。同样在springboot中,大量注解的使用使代码看起来更加简洁,提高开发的效率。这些注解不光包括springboot自有的,也有一些是继承自spring的。

项目配置注解

1. @SpringBootApplication

   @SpringBootApplication是一个复合注解(查看源码发现),包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。

  @SpringBootApplication:标注当前类是配置类,这个注解继承自@Configuration,并且将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。

  @EnableAutoConfiguration:是自动配置的注解,这个注解会根据添加的组件jar来完成一些默认配置。(做微服务架构时会添加spring-boot-starter-web这个组件的jar的pom依赖,这样配置会默认配置springmvc和tomcat。)

  @ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入spring容器中进行管理。等价于<context:component-scan>的xml配置文件中的配置项。

 

 

   多数情况下,这三个注解会被同时使用,基于最佳实践这三个注解就被做了包装,成为@SpringBootApplication注解。

2. @ServletComponentScan

  Servlet、Filter、Listener可以直接通过@WebSerlvet、@WebFilter、@WenListener注解自动注册,这样通过注解Serlvet、拦截器、监听器的功能而无需其他配置。

3. @MapperScan

  spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描。

  它和@mapper注解是一样的作用,不同的是扫描入口不一样。@mapper需要加在每一个mapper接口类上。所以多数情况下都是在规划好项目工程目录之后,通过@MapperSacn注解配置路径完成mapper接口的注入。添加mybatis相应的组件依赖之后,就可以使用该注解。

 

 

   进一步查看mybais-spring-boot-starter包,可以看到这里已经将mabatis做了包装。这也是spring的一个理念,不重复造轮子,整合优秀的资源进入到spring体系中。

 

 

 4. 资源导入注解

  @ImportResource @Import @PropertySource这三个注解都是用来导入自定义的一些配置文件。

  @ImportResource(locations={}) 导入其他xml配置文件,需要标注在主配置类上。

  @PorpertySource 导入property的配置文件,指定文件路径,这个相当于使用spring的<importresource/>标签来完成配置项的引入。

  @Import注解可以将普通类导入到spring容器中做管理。

 

Controller层

1. @controller

  在一个类上添加@Controller注解,表明这个类是一个控制器类,和@RequestMapping来配合使用拦截请求(处理http请求)。如果不在method中注明请求的方式,默认是拦截get和post请求,这样请求完成后会转向一个视图解析器。但是在大多数微服务搭建的时候,前后端会做分离,所以请求后端只关注数据处理,后端返回json数据的话,需要配合@ResponseBody注解来完成。

  这样一个需要返回数据的接口就需要3个注解来完成,大多数情况都需要返回数据,因此基于最佳实践将这三个注解进一步整合。

  @RestController的作用等同于@Controller和@ResponseBody的结合,一个类被加上@RestController注解,数据接口就不再需要添加@ResponseBody,更加简洁。

  @RequestMapping(value="",method=RequestMethod.GET)需要明确请求方式,这样写比较繁琐,可以简化为以下几个注解:

普通风格 Rest风格
@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 =“”)

 

 

 

 

 

 

  @RequestMapping注解是用来映射请求的,即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上。

  当使用@RequestMapping标记控制器类时,方法的请求地址是相对类地址而言的;当没有使用@RequestMapping标记类时,方法的请求路径是绝对路径。

  @RequestMapping的地址可以是url变量,并且通过@PathVariable注解获取作为方法的参数。

  @ResponseBody

  @ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

2. @CrossOrgin

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

3.  @Autowired

  它可以对类成员变量、方法、构造函数及注解进行标注,让spring完成bean自动装配的工作。 当需要从bean工厂获取一个bean时,spring会自动装配该bean中标记为@Autowired的元素。

4. @EnableCaching

  这个注解是spring framework中的注解驱动的缓存管理功能,其作用相当于spring配置文件中的cache manager标签。

5. @PathVariable

  路径变量注解,接收请求路径中占位符的值,@RequestMapping中用{xx}来定义url部分的变量名。

  @GetMapping("findById/{id}")
  public String findById(@PathVariable int id){
  return userService.findById(id);
  }
  请求路径:http://localhost:8080/lydService/testBoot/findById/1

  同样可以支持变量名加正则表达式的方式,变量名:[正则表达式]。

 

6. @RequestParam

  获取请求参数的值

@RequestMapping("/getUser")

public String getUser(@RequestParam("uid")Integer id, Model model) {

  System.out.println("id:"+id);

   return "user";

}

  请求示例:http://localhost:8080/User/getUser?uid=123

7. @PathVariable与@RequestParam的区别

https://www.cnblogs.com/goloving/p/9241393.html

8. @RequestBody

  @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

  注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。

   注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、数组、集合、对象等等。

  如果参数放在请求体中,传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或则形参前什么也不写也能接收。

 service层注解

1. @Service

  这个注解用来标记业务层的组件,加上该注解会将业务逻辑处理的类自动注入到Spring容器中。

2. @Resource

  @Resource和@Autowired一样都可以用来装配bean,都可以标注在字段上或者方法上。二者的区别在于匹配方式不同,@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配。

持久层注解

1. @Repository

  @Repository用于将数据访问层 (Mapper层 ) 的类标识为Spring Bean,管理操作数据库的对象。

  总的来看,@Component @Service @Controller @Repository是spring注解,注解后可以被spring框架扫描并注入到spring容器中进行管理。

  @Component是通用注解,其他三个注解是这个注解的拓展,并且有了特定的功能。@Repository、@Service、@Controller分别对应存储层Bean,业务层Bean和展示层Bean。通过这些注解的分层管理,就能将请求处理、业务逻辑处理、数据库操作处理分离出来,降低代码耦合度,也方便以后项目的维护和开发。

  在正常开发中,如果能用@Service, @Controller, @Repository其中一个标注这个类的定位的时候,就不要用@Component来标注。

2. @Transactional

  通过这个注解声明事务,可以添加在类上或者方法上。在springboot中不再单独配置事务管理,一般情况是在service曾添加事务注解,即可开启事务。

其他相关注解

  @ControllerAdvice注解定义全局异常处理类,统一处理异常。

  @ExceptionHandler注解生命异常处理方法,用在方法上面表示遇到这个异常就执行以下方法。

  @ControllerAdvice和@RestControllerAdvice:通常和@ExceptionHandler @InitBinder @ModelAttribute一起配合使用。

  @ControllerAdvice和@ExceptionHandler配合完成统一异常拦截处理。

  @RestControllerAdvice是@ControllerAdvice和@ResponseBody的合集,可以将异常以json的格式返回数据。

 

json

  一种与开发语言无关的、轻量级的数据存储格式,全称JavaScript Object Notation,一种数据格式的标准规范。起初来源于JavaScript这门语言,后来随着使用的广泛,几乎每门开发语言都有处理JSON的API(应用程序接口)。

  优点:易于人的阅读和编写,易于程序解析与生产。

  样例:首先一个花括号{},整个代表一个对象,同时里面是一种Key-Value的存储形式,它还有不同的数据类型来区分。

 

posted @ 2020-06-11 17:01  FardlyP  阅读(287)  评论(0)    收藏  举报