springboot开发中常用注解总结

67 阅读6分钟

放入容器型注解

简介:个人觉得就是申明一个实例对象,然后将这个对象交给spring管理。

1、@Component:放在类上,把普通类实例化到spring容器中。可以说很多注解都是基于这个注解的。

2、@Bean: 放在方法上,用@Bean标注方法等价于XML中配置bean,这个方法一般返回一个实体对象,告诉spring这里产生一个对象,然后这个对象会交给Spring管理。产生这个对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的容器中。

3、@Configuration:标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。(其实就是靠@Component注解)

4、@RestController、@Controller、@Service、@Repository:
这四个注解熟悉吗?我想大家一定知道这四个注解各自的作用,但是这里需要强调一点就是他们其实是一样的,至少在spring5.x之前,他们实质上是没有什么区别的(当然你非要说@RestController=@Controller+@ResponseBody 这个也对)。我这边主要是要强调,他们实质上都是依靠于@Component注解的,我们可以查看源码。

从容器中取出型注解

简介:个人觉得就是我们平时所说的依赖注入。

1、@Resource:是按照名称来注入的,当找不到与名称匹配的bean才会按照类型来注入。其实我们平时用的@Resource都是用了他的默认的方式,即都不指定名字和类型。spring通过反射机制使用byName方法自动注入。

@Resource 的装配顺序:

  1. 如果同时指定了 name 属性和 type 属性,那么 Spring 将从容器中找唯一匹配的 bean 进行装配,找不到则抛出异常
  2. 如果指定了 name 属性值,则从容器中查找名称匹配的 bean 进行装配,找不到则抛出异常
  3. 如果指定了 type 属性值,则从容器中查找类型匹配的唯一的 bean 进行装配,找不到或者找到多个都会抛出异常
  4. 如果都不指定,则会自动按照 byName 方式进行装配(我们一般都用的是这个。。。)

2、@Autowried:默认是按照类型进行装配注入,如果允许 null 值,可以设置它 required 为false。即:当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false) ,这等于告诉 Spring:在找不到匹配 Bean 时也不报错。

3、@Qualifier:@Autowired是根据类型进行自动装配的。如果当spring上下文中存在不止一个A类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在A类型的bean,而且我们又使用A类型,也会抛出BeanCreationException异常。针对存在多个A类型的Bean,我们可以联合使用@Qualifier和@Autowired来解决这些问题。

简单来说,Qualifier就是规定一下Bean的名字,相当于@Resource规定了name属性。

功能型注解

1、@SpringBootApplication:这个注解就是集成了:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解。其中@SpringBootConfiguration:表示这个类为配置类;@EnableAutoConfiguration:表示开启自动配置,我们平时所说springboot无配置就是这个参数起的作用,他读取了springboot默认的配置;@ComponentScan:表示自动扫描,这个扫描默认只能扫同一级的目录。

2、@EnableConfigurationProperties:将带有@ConfigurationProperties注解的类注入为Spring容器的Bean。如果使用了@ConfigurationProperties但是没有在启动类上增加这个注解,则@ConfigurationProperties将不起作用。

3、@Async与@EnableAsync:其中@Async表示这个方法为异步方法;@EnableAsync这个注解需要加在启动类上,表示支持异步操作;如果不加,则@Async将不起作用。

4、 @Transactional

  • 标注在类上或者方法上
  • 在要开启事务的方法上使用@Transactional注解

我们知道 Exception 分为运行时异常 RuntimeException 和非运行时异常。 在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚。

**

作用于类:当把@Transactional 注解放在类上时,表示所有该类的public 方法都配置相同的事务属性信息。
作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息

前后端传值注解

  • 标注在形参
  • 用于获取路径参数,使用{参数名称}描述路径参数
  • 获取url中的数据

 @RequestParam

  • 标注在形参
  • 绑定请求参数和处理器形参之间的关系
  • 获取请求参数的值(指问号后的参数,url?a=1&b=2)

用于获取查询参数,
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)

  • value:参数名
  • required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
  • defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值

 @RequestBody

  • 标注在形参
  • 读取请求的body部分且Content-Type 为 application/json格式的数据,接收到数据之后会自动将数据绑定到 java对象上。
  • @ResponseBody作用在方法上或类上,让该方法的返回结果直接写入 HTTP response body 中,不会经过视图解析器,返回数据直接在页面展示。

不要和@ResponseBody混淆了,@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),Content-Type 为 application/json 格式;GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

比如前端以post方式传json字符串,此时后端就可以使用@RequestBody来接收

 @Param

  • 标注在形参位置

  • 作用:赋值

  • 专门为SQL服务的

  • 在形参位置标注,外部传入形参对应的值,值会赋给SQL语句中,进行动态sql。

  • 当一个实体类有很多属性时,如果一个一个的写在形参上会很冗余,我们也可以直接是通过一个整个实体类,通过@Param标识一个实体类来进行。

  • 几个注意点:
    当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 36: …解声明参数的时候,必须使用的是#̲{}来取参数。使用{}方式取值会报错。