编程语言中高级特性:注解
注意:本文以java为例说明。
什么是注解
Java注解是JDK1.5的新特性,与注释比较类似,不同的是注释是给我们开发人员看的,注解是给代码看的
,它是代码层面的解释说明
,注解也被称为元数据。注解的使用也很简单,语法规则:@注解名称
,比如我们常见的“@Override”。
注解本身没有任何意义,单独的注解就是一种注释,他需要结合其他如反射等技术才有意义。
Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联
。
Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。
Java注解应用
- 生成文档这是最常见的,也是java 最早提供的注解;
- 在编译时进行格式检查,如@Override放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出;
- 跟踪代码依赖性,实现替代配置文件功能,比较常见的是spring 2.5 开始的基于注解配置,作用就是减少配置;
- 在反射的 Class, Method, Field 等函数中,有许多于 Annotation 相关的接口,可以在反射中解析并使用 Annotation。
Java注解分类
- Java自带的标准注解
- 元注解,用于定义注解的注解,通常用在注解的定义上
- 自定义注解
注解的定义与使用
高级使用:通过反射获取注解的信息
# 创建类和注解
@Testclass("db_Student2")//类注解
//创建学生类
class Student2{
@Testfield(columnname = "name",type = "varchar",length = 20)//属性注解
String name;
@Testfield(columnname = "age",type = "int",length = 3)
int age;
@Testfield(columnname = "ID",type = "int",length = 10)
int ID;
public Student2() {
}
public Student2(String name, int age, int ID) {
this.name = name;
this.age = age;
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
}
//类的注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Testclass{
String value();
}
//属性的注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Testfield{
String columnname();
String type();
int length();
}
# 反射操作注解
public class test05 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
Class c1 = Class.forName("com.zjrcu.reflection.Student2");
//通过反射获得注解
Annotation[] annotations = c1.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation);
}
//通过反射获得注解value的值
Testclass testclass = (Testclass)c1.getAnnotation(Testclass.class);
String value = testclass.value();
System.out.println(value);
//获取类中指定注解的value值
Field f = c1.getDeclaredField("name");
Testfield testfield = (Testfield) f.getAnnotation(Testfield.class);
System.out.println(testfield.columnname());
System.out.println(testfield.length());
System.out.println(testfield.type());
}
}
扩展阅读
Java注解
Java之注解与反射
利用注解和反射实现一个"低配版"的依赖注入
JAVA反射+运行时注解实现URL路由
使用Java元注解和反射实现简单MVC框架
C# 特性标签(Attribute)
最后更新于 2022-10-12 14:42:54 并被添加「」标签,已有 665 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭