一篇文章掌握Java注解

  • 时间:
  • 浏览:1

注解的功能很强大,Spring和Hebernate哪些地方地方框架在日志和有效性中小量使用了注解功能。注解可不不能应用在使用标记接口的地方。不同的是标记接口用来定义全部的类,但怎么才能 很久为单个的土方式 定义注释,累似 与否将从前土方式 暴露为服务。

RetentionPolicy.SOURCE – 在编译阶段丢弃。哪些地方地方注解在编译现在开始英语 很久就不再有任何意义,很久它们不不写入字节码。@Override, @SuppressWarnings都属于累似 注解。

用从前词就可不不能描述注解,那很久元数据,即并与否 描述数据的数据。很久,可不不能说注解很久源代码的元数据。比如,下面这段代码:

@Inherited – 定义该注释和子类的关系

对于@Override注释你可能一点问题报告 ,它哪些地方都没做,那它是怎么才能 才能 检查在父类暗含从前同名的函数呢。当然,无须惊讶,我是逗你玩的。@Override注解的定义不仅仅必须如此一点代码。这次责内容不得劲要,我不得不再次重复:Annotations仅仅是元数据,和业务逻辑无关。理解起来不得劲困难,但很久从前 。可能Annotations不暗含业务逻辑,如此时要村里人 来实现哪些地方地方逻辑。元数据的用户来做并与否事情。Annotations仅仅提供它定义的属性(类/土方式 /包/域)的信息。Annotations的用户(同样是一点代码)来读取哪些地方地方信息并实现必要的逻辑。

ElementType.ANNOTATION_TYPE 从前 注释

如此,注解的内部内部结构到底是怎么才能 才能 定义的呢?Annotations只支持基本类型、String及枚举类型。注释中所有的属性被定义成土方式 ,并允许提供默认值。

J2SE5.0版本在 java.lang.annotation提供了并与否 元注解,专门注解一点的注解:

@Target – 表示该注解用于哪些地方地方。可能不明确指出,该注解可不不能装入 任何地方。以下是一点可用的参数。时要说明的是:属性的注解是兼容的,可能你想给7个属性都再加注解,仅仅排除从前属性,如此你时要在定义target暗含所有的属性。

编写Annotation非常简单,可不不能将Annotation的定义同接口的定义进行比较。一点人来看从前例子:从前是标准的注解@Override,从前 是用户自定义注解@Todo。

ElementType.METHOD

在最新的servlet3.0中引入了很久新的注解,尤其是和servlet安全相关的注解。

ElementType.TYPE:用于描述类、接口或enum声明

Annotation是并与否 应用于类、土方式 、参数、变量、构造器及包声明中的特殊修饰符。它是并与否 由JSR-175标准选者用来描述元数据的并与否 工具。

上方的代码中,我重写了toString()土方式 并使用了@Override注解。怎么才能 让,即使我不使用@Override注解标记代码,线程池池要是能正常执行。如此,该注解表示哪些地方?如此写哪些地方地方好处吗?事实上,@Override告诉编译器并与否土方式 是从前重写土方式 (描述土方式 的元数据),可能父类中不发生该土方式 ,编译器便会报错,提示该土方式 如此重写父类中的土方式 。可能我不小心拼写错误,累似 将toString()写成了toStrring(){double r},怎么才能 让我也如此使用@Override注解,那线程池池依然能编译运行。但运行结果会和我期望的大不相同。现在一点人了解了哪些地方是注解,怎么才能 让使用注解有有利于阅读线程池池。

@Retention– 定义该注解的生命周期。

@Target? –注解用于哪些地方地方

HttpMethodConstraint – 指明不累似 型请求的安全约束,和ServletSecurity 注解中描述HTTP协议土方式 类型的注释不同。

哪些地方是注解?

注解用例

但目前为止一切看起来都还不错。一点人定义了自己的注解并将其应用在业务逻辑的土方式 上。现在一点人时要写从前用户线程池池调用一点人的注解。这里一点人时要使用反射机制。可能你熟悉反射代码,就会知道反射可不不能提供类名、土方式 和实例变量对象。所哪些地方地方地方对象也有getAnnotation()并与否土方式 用来返回注解信息。一点人时要把并与否对象转换为一点人自定义的注释(使用 instanceOf()检查很久),一起去也可不不能调用自定义注释上方的土方式 。看看以下的实例代码,使用了上方的注解:

WebInitParam – 该注解用来声明Servlet或是过滤器的中的初始化参数,通常配合 @WebServlet 可能 @WebFilter 使用。

ElementType.FIELD:用于描述实例变量

使用Annotation很久(甚至在使用很久),XML被广泛的应用于描述元数据。不知好久现在开始英语 一点应用开发人员和架构师发现XML的维护如此糟糕了。一点人希望使用一点和代码紧耦合的东西,而也有像XML那样和代码是松耦合的(在一点具体情况下甚至是全部分离的)代码描述。可能你在Google中搜索“XML vs. annotations”,会就看一点关于并与否问题报告 的辩论。最有趣的是XML配置实在很久为了分离代码和配置而引入的。上述并与否 观点可能会怎么才能 很久很疑惑,两者观点似乎构成了并与否 循环,但各有利弊。下面一点人通过从前例子来理解这两者的区别。

@Documented –注解与否将暗含在JavaDoc中

ServletSecurity该注解标注在Servlet继承类上方,强制该HTTP协议请求遵循安全约束。

下面的例子演示了怎么才能 才能 使用上方的注解;

从前 不得劲要的因素是Annotation定义了并与否 标准的描述元数据的土方式 。在这很久,开发人员通常使用一点人自己的土方式 定义元数据。累似 ,使用标记interfaces,注释,transient关键字等等。每个线程池池员按照自己的土方式 定义元数据,而不像Annotation并与否标准的土方式 。

ElementType.PACKAGE 用于记录java文件的package信息

当一点人使用Java的标注Annotations(累似 @Override)时,JVM很久从前用户,它在字节码层面工作。到这里,应用开发人员还必须控制很久能使用自定义的注解。怎么才能 让,一点人讲解一下怎么才能 才能 编写自定义的Annotations。

为哪些地方要引入注解?

MultipartConfig –该注解标注在Servlet上方,表示该Servlet希望解决的请求的 MIME 类型是 multipart/form-data。

HttpConstraint – 该注解代表所有HTTP土方式 的应用请求的安全约束,和ServletSecurity注释中定义的HttpMethodConstraint安全约束不同。

RetentionPolicy.CLASS – 在类加载的很久丢弃。在字节码文件的解决暗含用。注解默认使用并与否土方式 。

假使 你想为应用设置很久的常量或参数,并与否具体情况下,XML是从前很好的选者,可能它不不同特定的代码相连。可能你想把某个土方式 声明为服务,如此使用Annotation会更好一点,可能并与否具体情况下时要注解和土方式 紧密耦合起来,开发人员也时要认识到这点。

RetentionPolicy.RUNTIME– 始终不不丢弃,运行期也保留该注解,怎么才能 让可不不能使用反射机制读取该注解的信息。一点人自定义的注解通常使用并与否土方式 。

WebServlet –该注解用来声明从前Servlet的配置。

@Inherited – 与否允许子类继承该注解

ElementType.CONSTRUCTOR

@Documented–从前简单的Annotations标记注解,表示与否将注解信息再再加java文档中。

目前,一点框架将XML和Annotation并与否 土方式 结合使用,平衡两者之间的利弊。

在讲述这次责很久,建议你首先下载Annotation的示例代码AnnotationsSample.zip 。下载很久装入 你习惯使用的IDE中,哪些地方地方代码会帮助你更好的理解Annotation机制。

ElementType.PARAMETER

WebListener –该注解为Web应用线程池池上下文中不累似 型的事件声明监听器。

Annotation是怎么才能 才能 工作的?为什么会么会么编写自定义的Annotation?

ElementType.LOCAL_VARIABLE

HandlesTypes –该注解用来表示一组传递给ServletContainerInitializer的应用类。

可能注解中必须从前属性,可不不能直接命名为“value”,使用时不不再标明属性名。

一点人来逐个讲述编写自定义Annotations的要点。上方的例子中,你就看一点注解应用在注解上。

@Retention –哪些地方很久使用该注解

WebFilter – 该注解用来声明从前Server过滤器;