java自定义注解
-
Java注解
Java注解(Annotation)是JDK5.0引入的一种注释直接,可以作用于java语言中的类,方法,变量,参数和包中。java注解可以通过反射获取注解内容, 在编译器生成类文件时,注解可以被嵌入到字节码中。Java 虚拟机可以保留注解内容,在运行时可以获取到注解内容 。 java也支持自定义注解。
-
内置注解
java有自己的一套注解,分别如下:
-
源注解
@Documented:标记这些注解是否在用户文档中
@Inherited:标记注解继承哪个注解
@Retention:标识这个注解的作用,是作用于代码中,编译期,还是运行期
@Target:用来标识这个注解是作用于方法上还是类上还是其他字段上 -
java提供的注解
@Override:检查该方法是否是重载方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
@Deprecated:标记过时方法。如果使用该方法,会报编译警告。
@SuppressWarnings:指示编译器去忽略注解中声明的警告。
-
-
自定义注解
自定义一个java注解,用来注解到方法上面
@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String[] value() default "张三"; }
public class Person { @MyAnnotation(value = "lisi") public void boy(String name){ System.out.println("boy name is "+ name); } @MyAnnotation(value = "zhangsan") public void girl(String name){ System.out.println("girl name is " +name); } }
通过反射来获取注解
public class PersonAnnonationTest { public static void main(String[] args) throws Exception{ Class<?> personClass = ClassLoader.getSystemClassLoader().loadClass("com.rookie.bigdata.annotation.Person"); Person personInstance = (Person)personClass.newInstance(); Method method = personClass.getMethod("boy", new Class[]{String.class}); method.invoke(personInstance,new Object[]{"张三"}); //获取注解上面的值 if(method.isAnnotationPresent(MyAnnotation.class)){ //获取上面的注解 MyAnnotation annotation = method.getAnnotation(MyAnnotation.class); //获取注解的值 String[] value = annotation.value(); for (String s : value) { System.out.println(s); } } } }