一、 Java注解的介绍
JRE 的库包 java.lang.annotation 中代码包括注释相关的接口、类等内容。接口 java.lang.annotation 是所有自定义注解自动继承的接口,不需要定义时指定。
注解是一系列元数据,它利用元数据来解释、说明程序代码(被注解的对象)。
二、Java的元注解
元注解是加到注解上的注解,它的目的是解释、说明其他普通注解。
元注解有@Retention、@Taget、@Inherited、@Documented、@intertface五种。
2.1 @Taget
@Taget该注解的作用是告诉 Java 将自定义的注解用于什么地方,比如类、方法、构造器、变量上等,它的值是一个枚举类型,有如下属性值。
- ElementType.CONSTRUCTOR:用于描述构造器。
- ElementType.FIELD:用于描述成员变量、对象、属性( 包括enum实例 )。
- ElementType.LOCAL_VARIABLE:用于描述局部变量。
- ElementType.METHOD:用于描述方法。
- ElementType.PACKAGE:用于描述包。
- ElementType.PARAMETER:用于描述参数。
- ElementType.TYPE:用于描述类、接口( 包括注解类型 )或 enum 声明。
2.2 @Retention
该注解用于说明自定义注解的生命周期,在注解中有三个生命周期。
- RetentionPolicy.RUNTIME:始终不会丢弃, 运行期也保留读注解,可以使用反射机制读取该注解的信息。 自定义的注解通常使用这种方式。
- RetentionPolicy.CLASS:类加载时丢弃,默认使用这种方式。
- 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):用在方法上面表示遇到这个异常就执行所标注的方法