From a789cec55dc7752809b02bee414fd22daeffc14e Mon Sep 17 00:00:00 2001 From: RyanSmith <875354601@qq.com> Date: Thu, 16 Jun 2016 22:43:19 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E6=94=B9]=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\346\263\250\350\247\243.md" | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git "a/main/JAVA/\350\257\255\346\263\225\345\237\272\347\241\200\344\270\216\347\273\206\350\212\202/\346\263\250\350\247\243.md" "b/main/JAVA/\350\257\255\346\263\225\345\237\272\347\241\200\344\270\216\347\273\206\350\212\202/\346\263\250\350\247\243.md" index 04ecded..80e94c1 100644 --- "a/main/JAVA/\350\257\255\346\263\225\345\237\272\347\241\200\344\270\216\347\273\206\350\212\202/\346\263\250\350\247\243.md" +++ "b/main/JAVA/\350\257\255\346\263\225\345\237\272\347\241\200\344\270\216\347\273\206\350\212\202/\346\263\250\350\247\243.md" @@ -8,8 +8,10 @@ - 定义注解需要定义一些它的属性(添加元注解) - 注解绝大数的使用情景是在框架中使用。例子@service等。 +###参考链接 +[深入理解Java:注解(Annotation)自定义注解入门](http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html) - +--- ###元注解: @@ -21,19 +23,48 @@ 4. @Inherited : 被标注的类型是被继承的 +######@Target +说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。 + +  作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方) + +  取值(ElementType)有: + +    1.CONSTRUCTOR:用于描述构造器 +    2.FIELD:用于描述域 +    3.LOCAL_VARIABLE:用于描述局部变量 +    4.METHOD:用于描述方法 +    5.PACKAGE:用于描述包 +    6.PARAMETER:用于描述参数 +    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明 +######@Retention +定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。 +  作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效) +  取值(RetentionPoicy)有: +    1.SOURCE:在源文件中有效(即源文件保留) +    2.CLASS:在class文件中有效(即class保留) +    3.RUNTIME:在运行时有效(即运行时保留) +######@Documented: + +  @Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。 +######@Inherited: + +  @Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。 +     +- + ###自定义注解: - +例子:日志的注解(配合aop或者字节码增强技术可以再指定位置加日志) ```java -/** - * 水果名称注解 - * @author peida - * - */ -@Target(ElementType.FIELD) + +@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented -public @interface FruitName { +public @interface Log{ String value() default ""; } ``` + + + -- Gitee