自定义注解

实现自定义注解

元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
@Target
@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

2.@Retention

表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

自定义注解案例如下:

package com.itmayiedu.annotation;

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

/**
 * @Target(value = ElementType.METHOD) 设置注解权限<br>
 */
@Target(value = ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
// @interface 定义注解
public @interface AddAnnotation {
	// 手写Spring事务注解
	int userId() default 0;
	String userName() default "默认名称";
	String[]arrays();
}

然后再把自定义的注解用一下:

package com.itmayiedu.annotation;

import java.lang.reflect.Method;

public class User {
	@AddAnnotation(userName = "张三", userId = 18, arrays = { "1" })
	public void add() {
	}
	public void del() {
	}
	public static void main(String[] args) throws ClassNotFoundException {
		// 怎么样获取到方法上注解信息 反射机制
		Class<?> forName = Class.forName("com.itmayiedu.annotation.User");
		// 获取到当前类(不包含继承)所有的方法
		Method[] declaredMethods = forName.getDeclaredMethods();
		for (Method method : declaredMethods) {
			// 获取该方法上是否存在注解
			System.out.println("####方法名称" + method.getName());
			AddAnnotation addAnnotation = method.getDeclaredAnnotation(AddAnnotation.class);
			if (addAnnotation == null) {
				// 该方法上没有注解
				System.out.println("该方法上没有加注解..");
				continue;
			}
			// 在该方法上查找到该注解
			System.out.println("userId:" + addAnnotation.userId());
			System.out.println("userName:" + addAnnotation.userName());
			System.out.println("arrays:" + addAnnotation.arrays());
			System.out.println();
		}
	}
}

运行效果截图:
在这里插入图片描述

posted @ 2018-10-15 20:20  抬头不见星空  阅读(27)  评论(0)    收藏  举报