Java注解
注解本质是一个接口,功能是对程序的描述(给计算机看的)
作用
- 编写文档
- 代码分析
- 编译检查
- 可替换配置文件的工作
内置注解
- @Override:检测继承
- @Deprecated:标注过时
- @SuppressWarnings(“all”):压制所有警告
元注解:
@Target:指定被描述注解的作用位置(类TYPE,成员变量FIELD,方法METHOD)
@Retention:指定被描述注解的保留阶段(源码,class,runtime)
@Document:被描述注解是否抽取到API文档中
@Inherited:被描述注解是否会被子类继承
定义方式:
-
元注解:描述注解的注解
-
public @interface 接口名,@interface等价于extend Annotation接口
-
属性:接口中的抽象方法,返回值:基本数据类型,String,枚举,注解及以上类型的数组
-
属性定义的特殊情况:
- default:String name() default “小明”;可以赋默认值
- value:int value();当只有一个值时可以省略value
代码示例:
自定义注解
public @interface SelfAnno {
int value();
String name() default "小明";
int[] age();
}
测试类
public class Demo {
@SelfAnno(value = 13,age={12,456,1})
public void test(){
}
}
参数如下

注解替换配置文件案例:
Demo类1
package main.java.com.guaosky.annotationtest;
public class ProDemo {
public void show(){
System.out.println("ProDemo running~");
}
}
Demo类2
package main.java.com.guaosky.annotationtest;
public class ProDemo1 {
public void show(){
System.out.println("ProDemo1 start!");
}
}
注解类
package main.java.com.guaosky.annotationtest;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ProSetting {
String className();
String methodName();
}
测试类
package main.java.com.guaosky.annotationtest;
import java.lang.reflect.Method;
@ProSetting(className = "main.java.com.guaosky.annotationtest.ProDemo1",methodName = "show")
public class ProMain {
public static void main(String[] args) throws Exception{
Class<ProMain> cls = ProMain.class;
ProSetting proSettingImpl = cls.getAnnotation(ProSetting.class);
String className = proSettingImpl.className();
String methodName = proSettingImpl.methodName();
// 根据类名获取字节码文件对象
Class aClass = Class.forName(className);
Object obj = aClass.newInstance();
Method method = aClass.getMethod(methodName);
method.invoke(obj);
}
}
结果
ProDemo1 start!

浙公网安备 33010602011771号