JAVA Annotation

简介: <p>介绍</p> <p>    尤其是我们在学习Spring时,都绕不开Annotation,而且使用的非常频繁,并且给我们带来很大的便利, 所以我们有必要了解JAVA Annotation。</p> <p>    在此,我们自定义两个Annotation:一个是Class相关的Annotation;另一个是Method相关的Annotation。然后,我们写一个类来使用那两个Ann

介绍

    尤其是我们在学习Spring时,都绕不开Annotation,而且使用的非常频繁,并且给我们带来很大的便利, 所以我们有必要了解JAVA Annotation。

    在此,我们自定义两个Annotation:一个是Class相关的Annotation;另一个是Method相关的Annotation。然后,我们写一个类来使用那两个Annotation,这样我们就能比较快速的了解Annotation。


自定义一个Class相关的Annotation:Message.java

package shuai.study.annotation;

import java.lang.annotation.Documented;
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)
@Documented
public @interface Message {
	String mess();
}

------------------------------------------------------------------------------------------------------------------------------------------------

对于上面的Annotation,你可能不清楚@Target(ElementType.TYPE) 和 @Retention(RetentionPolicy.RUNTIME) 是什么意思,那么我们就可以看一下JDK的源码:

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE
}

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}


JDK的源码就是NB,写得非常清楚!

------------------------------------------------------------------------------------------------------------------------------------------------


另一个Method相关的Annotation:Employee.java

package shuai.study.annotation;

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

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Employee {
	String name() default "XXX";

	int budget() default 0;
}

再写一个类Company.java,来使用上面的两个Annotation:

package shuai.study.annotation;

@Message(mess = "NB company publish month star, please pay attention to this message")
public class Company {
	@Employee(name = "SB", budget = 6666)
	public void monthStar() {
		System.out.println("向钱看,向厚赚!");
	}
}

最后再来一个测试启动类AnnotationTest.java:

package shuai.study.annotation;

import java.lang.reflect.Method;

public class AnnotationTest {

	public static void main(String[] args) throws Exception {
		Class<?> companyClass = Class.forName("shuai.study.annotation.Company");

		if (companyClass.isAnnotationPresent(Message.class)) {
			Message message = companyClass.getAnnotation(Message.class);
			System.out.println("=== " + message.mess() + " ===");
		}

		Method[] methods = companyClass.getMethods();
		int length = methods.length;

		for (int index = 0; index < length; index++) {
			if (methods[index].isAnnotationPresent(Employee.class)) {
				Employee employee = methods[index].getAnnotation(Employee.class);
				System.out.println("Employee Name: " + employee.name());
				System.out.println("Employee Budget: " + employee.budget());
			}
		}
	}
}




相关文章
|
6月前
|
安全 Java 编译器
Java其他: 什么是Java中的注解(Annotation)?
Java其他: 什么是Java中的注解(Annotation)?
80 0
|
SQL XML SpringCloudAlibaba
Java独有特性:注解(annotation)
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它本身并不起任何作用,可以说有它没它都不影响程序的正常运行,注解的作用在于**「注解的处理程序」**,注解处理程序通过捕获
169 0
|
6月前
|
Java 编译器 开发者
Java注解(Annotation)技术深入解析
Java注解(Annotation)技术深入解析
447 1
|
6月前
|
Java
【Java】注解(Annotation)
【Java】注解(Annotation)
48 0
|
Java 编译器
Java Annotation Processor(一)
Java Annotation Processor
475 0
|
安全 Java 编译器
Java中的String实例化、Annotation注解类、继承的多态和Object类(附带相关面试题)
1.java中String两种实例化对象2.Annotation注解类 3.继承的多态 4.Object类
117 0
Java中的String实例化、Annotation注解类、继承的多态和Object类(附带相关面试题)
|
设计模式 缓存 Java
Java反射(反射与代理设计模式、反射与Annotation、自定义Annotation、反射整合工厂设计模式和代理设计模式)
1.反射与代理设计模式,2.反射与Annotation,3.自定义Annotation,4.Annotation整合工厂设计模式和代理设计模式
72 0
|
安全 Java 编译器
一文带你全面深入理解Java注解Annotation
一文带你全面深入理解Java注解Annotation
271 1
一文带你全面深入理解Java注解Annotation
|
Java Maven
Java Annotation Processor(二)
Java Annotation Processor
195 0
|
Java 测试技术 程序员
Java的注解(Annotation)
Java的注解(Annotation)
133 0