java中annotation

介绍
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件、或者运行时中出现(SOURCE/CLASS/RUNTIME)。Java中注解形式 @(注解名)

作用分类:

①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】

② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】

③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】

常见注解
Java自带注解

@ override (表示覆盖的方法)@ deprecated(表示方法已经过时) @ suppvisewarning(表示忽略警告)

常见第三方注解

spring:@Autowired,@Service,@Repository;

mybatis:@InsertProvider,@UpdateProvider,@Options;

注解分类
按照运行机制分类
源码注解;

编译时注解(在源码和.class中都存在):@override;@Deprecated;@Suppvisewarnings

运行时注解(在运行阶段还会起作用,甚至会影响程序的运行逻辑):@Autowired

按照注解来源分类
来自jdk的注解,来自第三方的注解,自定义注解,元注解(给注解进行注解);

元注解:

@Target():注解的作用域

@Retention():注解的生命周期

@Inherit:允许子类继承,父类如果有注解,则子类会继承该注解信息

@Document:生成Javadoc会包含注解信息

自定义注解
package myannotation.test.com;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//表明该注解可以在方法和类上使用
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)//运行时
@Inherited//可以继承
@Documented

public @interface myannotation {//使用interface关键字
//成员类型受到限制
//合法类型包括基本类型以及String,class,annotation,enumeration

//如果注解的成员只有一个那么名字必须是value()
//在使用时可以忽略成员名和复制号(=)

//注解类可以没有成员
//此时称为标识注解

String desc();//成员以无参数无异常方式声明
String author();
int age() default 18;//可以用default来指定默认值

}

使用注解

package extense.test.com;
import myannotation.test.com.*;

public class Main {
@myannotation(author = “ming”, desc = “i’m hansome”,age=20)
public String face() {

	return null;
}

}
解析注解
通过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。

猜你喜欢

转载自blog.csdn.net/qq_38413862/article/details/88620170