豆瓣
扫码直接下载
读过 精通Spring 4.x
一.java5.0注解知识快速进阶1.了解注解 对于java开发人员来说,在编写代码时,除源程序外,还会使用Javadoc标签对类、方法或成员变量进行注释,以便利用Javadoc工具生成和源码对应的注释文档。这些@param、@return等Javadoc标签就是注解标签,它们为第三方工具提供了描述程序代码的注释信息。 java5.0注解可以看作是Javadoc和Xdoclet标签的延伸和发展。在java5.0中可以自定义这些注解,并通过反射机制获取类中标注的注解,完成特定的功能。 注解是代码的附属信息,它遵循一个基本原则:注解不能直接干扰代码的运行,无论增加或删除注解,代码都能够正常运行。Java语言解释器会忽略这些注解,而有第三方工具负责对注解进行处理。第三方工具可以通过注解间接控制代码的运行,他们通过java反射机制读取注解的信息,并根据这些信息更改目标程序的逻辑,而这也是spring AOP对@AspectJ提供支持所采取的方法。 2.一个简单的注解类 package com.smart.aspectj.anno; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) //1️⃣ @Target(ElementType.METHOD) //2️⃣ public @interface NeedTest { //3️⃣ boolean value() default true; //4️⃣ } Java新语法规定使用@interface修饰符定义注解,如3️⃣处所示;一个注解可以拥有多个成员,成员声明和接口声明类似,这里仅定义了一个成员,如4️⃣处所示。成员声明有以下几点限制: # 成员以无入参、无抛出异常的方式声明,如boolean value(String str);boolean value() throws Exception;等方式是非法的。 # 可以通过default为成员指定默认值。 # 成员类型是受限,合法的类型包括原始类型及其封装类、String、class、enum、注解类型,以及上述类型的数组类型,如ForumService value()、List value()是非法的。 在1️⃣和2️⃣处所看到的注解是java预定义的注解,称为元注解(Meta-Annotation),它们被java编译器使用,会对注解类的行为产生影响。@Retention(RetentionPolicy.RUNTIME)表示NeedTest这个注解可以在运行期被JVM读取,注解的保留期限类型在java.lang.annotation.Rentention类中定义,介绍如下: # SOURCE:注解信息仅保留在目标类代码的源码文件中,但对应的字节码文件将不再保留。 # CLASS:注解信息将进入目标类代码的字节码文件中,但类加载器加载字节码文件时,将不会把注解加载到JVM文件中,即运行期不能获取注解信息。 # RUNTIME:注解信息在目标类加载到JVM后依然保留,在运行期可以通过反射机制读取注解信息。 @Target(ElementType.METHOD) 表示NeedTest注解只能应用到目标类的方法上,注解的应用目标在java.lang.annotation.ElementType类中定义,介绍如下。 # TYPE:类、接口、注解类、Enum声明处,相应的注解称为类型注解。 # FIELD:类成员变量或常量声明处,相应的注解称为域值注解。 # METHOD:方法声明处,相应的注解称为方法注解。 # PARAMETER:参数声明处,相应的注解,称为参数注解。 # CONSTRUCTOR:构造函数声明处,相应的注解称为构造函数注解。 # LOCAL_VARIABLE:局部变量声明处,相应的注解称为局域变量注解。 # ANNOTATION_TYPE:注解类声明处,相应的注解称为注解类注解。ElementType.TYPE包括ElementType.ANNOTATION_TYPE # PACKAGE:包声明处,相应的注解称为包注解。引自 基于@AspectJ和Schema 的AOP
一.java5.0注解知识快速进阶
> 望舒的所有笔记(10篇)
先记录下来,等有时间我用OmniGraffle尝试下
表示其中内容是对原文的摘抄