java注解

最近有点郁闷,因为好像很多公司都已经开始使用spring注解来代替xml的配置方式使用spring。但是我以前从来没有用过注解,虽然前些日子也看了spring的注解,但是对于其实现原理还没明白,因此在这里通过一个注解的例子来让大家理解注解是如何工作的。当然spring的注解还参杂了反射,本例子中没有用到反射,有意向的可以自己去看看。

java中的注解常用的有两个类型,一个时Retention,另一个是Target:

    Retention是指明注解会在代码的哪一个阶段被丢弃,它有三个选择:

        RetentionPolicy.SOURCE  注解在编译期被丢弃

        RetentionPolicy.CLASS   注解存在于类文件中,但是在载入VM中时会被丢弃,这是Retention的默认行为

        RetentionPolicy.RUNTIME  使用这个选项,则注解存在于类文件以及VM中,这样就可以通过反射获取到注解

    Target是指明你的注解是用于类,方法,变量,构造器,当然这是可以都选择:

        

    /** Class, interface (including annotation type), or enum declaration */

        ElementType.TYPE   用于类,接口


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

        ElementType.FIELD  用于类变量


    /** Method declaration */

       ElementType. METHOD 用于类方法


    /** Parameter declaration */

       ElementType.PARAMETER  用于参数


    /** Constructor declaration */

        ElementType.CONSTRUCTOR  用于构造器


    /** Local variable declaration */

        ElementType.LOCAL_VARIABLE  用于本地变量


    /** Annotation type declaration */

        ElementType.ANNOTATION_TYPE   用于注解


    /** Package declaration */

        ElementType.PACKAGE   用于包

接下来再看看例子:

首先定义一个注解:

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


@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface TestAnnotation {
	String test1();
	String testDefault() default "厨子出现";
	int[] testArray() default {1,2,3};
	
}

再来运用这个定义的注解:

@TestAnnotation(test1="这是test1", testDefault="这是testDefault", testArray={5,6,7})
public class ExecuteAnnotation {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		if(ExecuteAnnotation.class.isAnnotationPresent(TestAnnotation.class)) {
			TestAnnotation ta = (TestAnnotation) ExecuteAnnotation.class.getAnnotation(TestAnnotation.class);
			System.out.println(ta);
			System.out.println(ta.test1() + ",   " + ta.testDefault());
			for(int i =0; i < ta.testArray().length; i++) {
				System.out.println("array===" + ta.testArray()[i]);
			}
		}

	}

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。