大家好,又见面了,我是你们的朋友全栈君。
自定义注解
@Target
自定义注解的使用范围
ElementType.METHOD:方法声明
ElementType.TYPE:类、接口(包括注解类型)或enum声明
ElementType.CONSTRUCTOR:构造器的声明
ElementType.FIELD:域声明(包括enum实例)
ElementType.LOCAL_VARIABLE:局部变量声明
ElementType.PACKAGE:包声明
ElementType.PARAMETER:参数声明
@Retention
注解级别信息
RetentionPolicy.RUNTIME:VM运行期间保留注解,可以通过反射机制读取注解信息
RetentionPolicy.SOURCE:注解将被编译器丢弃
RetentionPolicy.CLASS:注解在class文件中可用,但会被VM丢弃
@Document
将注解包含在Javadoc中
@Inherited
允许子类继承父类中的注解,默认不能被子类继承
创建一个自定义注解
/** * 自定义注解 * @author Le */
@Target({
ElementType.METHOD, ElementType.TYPE})
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String msg() default "this is myAnnotation"; //default 默认值
}
定义一个接口
package mydemo;
@MyAnnotation //使用自定义注解
public interface Message {
@MyAnnotation
public void msg();
}
接口实现
package mydemo;
@MyAnnotation
public class MessageImpl implements Message {
@Override
@MyAnnotation(msg = "我是自定义注解信息...")
public void msg() {
// TODO Auto-generated method stub
}
}
测试
package mydemo;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class Mytest {
Annotation[] annotation = null;
public static void main(String[] args) throws ClassNotFoundException {
new Mytest().getAnnotation();
}
private void getAnnotation() throws ClassNotFoundException {
Class<?> clazz = Class.forName("mydemo.MessageImpl"); //
boolean isEmpty = clazz.isAnnotationPresent(mydemo.MyAnnotation.class); //判断clazz是否使用了MyAnnotation自定义注解
if (isEmpty) {
annotation = clazz.getAnnotations(); //获取注解接口
for (Annotation a : annotation) {
MyAnnotation my = (MyAnnotation) a; //强制转换成MyAnnotation类型
System.out.println(clazz + "--" + my.msg());
}
}
Method[] method = clazz.getMethods();
System.out.println("Method");
for (Method m : method) {
boolean ismEmpty = clazz.isAnnotationPresent(mydemo.MyAnnotation.class);
if (ismEmpty) {
Annotation[] aa = m.getAnnotations();
for (Annotation a : aa) {
MyAnnotation my = (MyAnnotation) a;
System.out.println(m + "--" + my.msg());
}
}
}
}
}
运行输出内容如下:
class mydemo.MessageImpl--this is myAnnotation
Method
public void mydemo.MessageImpl.msg()--我是自定义注解信息...
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129174.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...