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