JAVA注解
来源:互联网 发布:java关键字 false 编辑:程序博客网 时间:2024/06/03 16:40
一、常见的几种注解:
JDK自带注解:@override、@Deprecated(过时)、@Suppvisewarning(压制)
常见的第三方注解:
Spring:@Autowired、@Service、@Repository
Mybatis:@InsertProvider、@UpdateProvider、@options
按执行机制(生命周期)注解的分类:
源码注解(source):只有源码中有,编译后.class文件中没有
编译时注解(class):源码和.class文件中均有,JDK自带的注解都属于此种
运行时注解(runtime):运行时还起作用,会影响运行逻辑,可通过反射读取,@Autowired
二、自定义注解:
1、语法要求
@Target({ElementType.METHOD,ElementType.TYPE}) -------------作用域(在哪些地方可以应用这个注解),CONSTRUCTOR(构造方法声明)、FIELD(字段声明)、LOCAL_VARIBLE(局部变量声明)、METHOD(方法声明)、PACKAGE(包声明)、PARAMETER(参数声明)、TYPE(类或接口)
@Retention(RetentionPolicy.RUNTIME)----------------生命周期、(源码、编译、运行)
@Inherited ---------------标识允许子注解继承
@Documented ---------------生成javadoc时会包含注解信息
public @interface Description{--------------------------关键字定义注解,public @interface
String des(); ------------------------成员以无参无异常方式声明
String author();
int age() default 18;-------------------用default为成员指定一个默认值
}
a、成员类型是受限的,合法的类型包括原始类型及String、Class、Annotation、Enumeration
b、如果注解只有一个成员,则该成员必须取名为value(),在使用时可以忽略成员名和赋值号(=)
c、注解类可以没有成员,没有成员的注解称为标识注解
2、使用自定义注解
语法:
@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,......)
eg:
Description(desc=" i am eyecolor",author="jack",age=18)
public String eyecolor(){
return "red”;
}
3、解析注解
通过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑
a、解析某个类上的注解
try{
Class c=Class.forName("com.yc.test.child"); -------------------使用类加载器加载类
boolean isExist=c.isAnnotationPresent(Description.class); ------------------ 上面的类的注解中是否有Description类型的。
if(isExist){
Description d=(Description)c.getAnnotation(Description.class);
System.out.println(d.value());
}
}catch(Exception e){
e.printTack();
}
b、解析方法上的注解
(1)Class c=Class.forName("com.yc.test.child"); -------------------使用类加载器加载类
Method [] ms=c.getMethods();
for(Method m:ms){
boolean isMExist = m.isAnnotationPresent(Description.class);
if(isMExist){
Description d=(Description)c.getAnnotation(Description.class);
System.out.println(d.value());
}
}
(2)for(Method m:ms){
Annotation [] as=m.getAnnotations();
for(Annotation a:as){
if(a instanceof Description){
Description d=(Description)a;
System.out.println(d.value());=
}
}
}
4、注解的继承(extends)
只继承类上的注解,方法上的不继承
@Description("i am a calss") -----------------------------------此注解能被Child继承
public class Person{ -----------------------------------只能是类,不能是接口
@Description("i am a method") -----------------------------------此注解不能被Child继承
public void getName(){
return name;
}
}
public class Child extends Person{ ----------------注解的继承
}
- Java注解-自定义注解
- Java注解----自定义注解
- Java注解自定义注解
- Java注解--四种元注解
- Java注解-三种內建注解
- 【Java】【注解】自定义注解
- java注解
- java注解
- java注解
- java 注解
- Java注解
- java 注解
- Java 注解
- Java注解
- java 注解
- JAVA注解
- Java注解
- Java注解
- Java 用hashmap统计词频
- 使用多态的注意事项
- 定位服务 CLLocationManager 的简单用法
- 网站推荐大全
- 随笔分类 - 无废话ExtJs系列教程
- JAVA注解
- ZOJ-3826-Hierarchical Notation【哈希】
- linux 技巧:使用 screen 管理你的远程会话http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
- ListView与ViewPager组合(一)
- spring boot实战(第六篇)加载application资源文件源码分析
- SSH的一些面试题
- 项目32.2 输出小星星
- android中context的详解
- POJ 1469 COURSES(二分图匹配)