springboot的相关注解

  1. 1. 一、 Java注解的介绍
  2. 2. 二、Java的元注解
    1. 2.1. 2.1 @Taget
    2. 2.2. 2.2 @Retention
    3. 2.3. 2.3 @Inherited
    4. 2.4. 2.4 @Documented
    5. 2.5. 2.5 @intertface
  3. 3. 三、常用的注解
  4. 4. 四、JPA注解
  5. 5. 五、异常处理

一、 Java注解的介绍

​ JRE 的库包 java.lang.annotation 中代码包括注释相关的接口、类等内容。接口 java.lang.annotation 是所有自定义注解自动继承的接口,不需要定义时指定。

​ 注解是一系列元数据,它利用元数据来解释、说明程序代码(被注解的对象)。

二、Java的元注解

元注解是加到注解上的注解,它的目的是解释、说明其他普通注解。

元注解有@Retention、@Taget、@Inherited、@Documented、@intertface五种。

2.1 @Taget

​ @Taget该注解的作用是告诉 Java 将自定义的注解用于什么地方,比如类、方法、构造器、变量上等,它的值是一个枚举类型,有如下属性值。

  1. ElementType.CONSTRUCTOR:用于描述构造器。
  2. ElementType.FIELD:用于描述成员变量、对象、属性( 包括enum实例 )。
  3. ElementType.LOCAL_VARIABLE:用于描述局部变量。
  4. ElementType.METHOD:用于描述方法。
  5. ElementType.PACKAGE:用于描述包。
  6. ElementType.PARAMETER:用于描述参数。
  7. ElementType.TYPE:用于描述类、接口( 包括注解类型 )或 enum 声明。

2.2 @Retention

该注解用于说明自定义注解的生命周期,在注解中有三个生命周期。

  1. RetentionPolicy.RUNTIME:始终不会丢弃, 运行期也保留读注解,可以使用反射机制读取该注解的信息。 自定义的注解通常使用这种方式。
  2. RetentionPolicy.CLASS:类加载时丢弃,默认使用这种方式。
  3. RetentionPolicy.SOURCE:编译阶段丢弃,自定义注解在编译结束之后就不再有意义,所以它们不会写入字节码。@Overide、@SuppressWarnings 都属于这类注解。

2.3 @Inherited

​ 被@Inherited注解过的注解作用于父类后,子类会自动继承父类的注解。

2.4 @Documented

该注解表示是否将注解信息添加在 Java 文档中。

2.5 @intertface

该注解用来声明一个注解, 其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型( 返回值类型只能是基本类型、Class、String、enum )。可以通过 default 来声明参数的默认值。

定义注解格式的代码:public @interface 注解名 {定义体}

三、常用的注解

​ @RequestMapping:为类或者方法指定一个映射路径,可以通过指定的路径来访问对应的类或者方法。

​ @PathVariable: 主要用来获取单一的URI参数。

​ @RequestBody:把请求报文中的正文自动转换成绑定给方法参数的变量字符串。(JSON格式返回数据)

​ @Param: 表示对参数的解释,一般写在注释里。

​ @JoinTable:表示Java类和数据库表的映射关系,也可以标识列的映射,主键的映射等。

​ @Transational: Spring事务管理的注解。被它标注的方法或类自动被注册成事务,接受spring容器的管理。

​ @Syschronized: 表示实现Java同步机制,用它作注解相当于加同步锁。

​ @Cacheable: 表明一个方法的返回值应该被缓存,注解@CacheFlush声明一个方法是清空缓存的触发器,这两个注解要配合缓存器使用。

​ @Conditional:根据满足某一特定条件创建一个特定的bean。

​ @ModelAttribute:声明在属性上,表示该属性来源于model里queryBean,并保存到model里。该注解声明在方法上,表示该方法的返回值被保存到model里。

四、JPA注解

​ @Entity: 表明被标注的对象是个实体类

​ @Table(name=””) : 指出实体对应的表名;

​ 这两个注解一般一起使用。但是如果表名和实体类名相同,则@Table可以省略。

​ 进行开发项目时,经常会用到将实体类映射到数据库表的操作。有时需要映射的几个实体类有共同的属性,这时可以把这些属性抽象成一个父类,然后各个实体类继承这个父类。可以使用@MappedSuperclass注解标注父类,它不会映射到数据库表,但子类在映射时会自动扫描父类的映射属性,并将这些属性添加到子类对应的数据库表中。使用@MappedSuperclass注解后不能再有@Entity或者@Table注解。

​ @Column:标识实体类中属性与数据表中的字段的对应关系。如果注解@Column的字段名与列名相同,则可以省略。 该注解有10个属性,且均为可选属性。内容略。。。

​ @Id: 用于声明一个实体类的属性映射为数据库的主键列。

​ @JoinColumn(name=”loginId”):表示一张表有指向另一个表的外键。

五、异常处理

​ @ControllerAdvice包含@Component,可以被扫描到,统一异常处理。

​ @ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就执行所标注的方法