一. 最常见的annotation
@Override:用在方法之上,用来告诉别人这一个方法是改写父类的
@DePRecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
@SuppressWarnings:暂时把一些警告信息消息关闭
@Entity:表示该类是可持久化的类
二. 设计一个自己的Annotation
先看代码再讲话
1. 只有一个参数的Annotation实现
view plaincopy to clipboardprint?
package chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation1 {
String value();
}
view plaincopy to clipboardprint?
package chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation1 {
String value();
}
package chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation1 {
String value();
}
2. 有两个参数的Annotation实现
view plaincopy to clipboardprint?
package chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation2 {
String description();
boolean isAnnotation();
}
view plaincopy to clipboardprint?
package chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation2 {
String description();
boolean isAnnotation();
}
package chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation2 {
String description();
boolean isAnnotation();
}
3. Annotation实验类
view plaincopy to clipboardprint?
package chb.test.annotation;
@MyAnnotation1("this is annotation1")
public class AnnotationDemo {
@MyAnnotation2(description="this is annotation2",isAnnotation=true)
public void sayHello(){
System.out.println("hello world!");
}
}
view plaincopy to clipboardprint?
package chb.test.annotation;
@MyAnnotation1("this is annotation1")
public class AnnotationDemo {
@MyAnnotation2(description="this is annotation2",isAnnotation=true)
public void sayHello(){
System.out.println("hello world!");
}
}
package chb.test.annotation;
@MyAnnotation1("this is annotation1")
public class AnnotationDemo {
@MyAnnotation2(description="this is annotation2",isAnnotation=true)
public void sayHello(){
System.out.println("hello world!");
}
}
4.Annotation测试说明类
view plaincopy to clipboardprint?
package chb.test.annotation;
import java.lang.reflect.Method;
import org.junit.Test;
public class TestAnnotation {
@Test
public void test() throws ClassNotFoundException, SecurityException, NoSuchMethodException{
Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
boolean flag = cls.isAnnotationPresent(MyAnnotation1.class);
if(flag){
System.out.println("判断类是annotation");
MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
System.out.println(annotation1.value());
}
Method method = cls.getMethod("sayHello");
flag = method.isAnnotationPresent(MyAnnotation2.class) ;
if(flag){
System.out.println("判断方法也是annotation");
MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"\t"+annotation2.isAnnotation());
}
}
}
view plaincopy to clipboardprint?
package chb.test.annotation;
import java.lang.reflect.Method;
import org.junit.Test;
public class TestAnnotation {
@Test
public void test() throws ClassNotFoundException, SecurityException, NoSuchMethodException{
Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
boolean flag = cls.isAnnotationPresent(MyAnnotation1.class);
if(flag){
System.out.println("判断类是annotation");
MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
System.out.println(annotation1.value());
}
Method method = cls.getMethod("sayHello");
flag = method.isAnnotationPresent(MyAnnotation2.class) ;
if(flag){
System.out.println("判断方法也是annotation");
MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"\t"+annotation2.isAnnotation());
}
}
}
package chb.test.annotation;
import java.lang.reflect.Method;
import org.junit.Test;
public class TestAnnotation {
@Test
public void test() throws ClassNotFoundException, SecurityException, NoSuchMethodException{
Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
boolean flag = cls.isAnnotationPresent(MyAnnotation1.class);
if(flag){
System.out.println("判断类是annotation");
MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
System.out.println(annotation1.value());
}
Method method = cls.getMethod("sayHello");
flag = method.isAnnotationPresent(MyAnnotation2.class) ;
if(flag){
System.out.println("判断方法也是annotation");
MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"\t"+annotation2.isAnnotation());
}
}
}
实验结果,控制台打出如下信息:
判断类是annotation
this is annotation1
判断方法也是annotation
this is annotation2 true
三.简介及说明
1. MyAnnotation1中的@Target(ElementType.TYPE)
@Target里面的ElementType是用来指定Annotation类型可以用在哪些元素上的.例如:
TYPE(类型)、FIELD(属性)、METHOD(方法)、PARAMETER(参数)、CONSTRUCTOR(构造函数)、LOCAL_VARIABLE(局部变量),、PACKAGE(包),其中的TYPE(类型)是指可以用在Class,Interface,Enum和Annotation类型上。
2. MyAnnotation1中的@Retention(RetentionPolicy.RUNTIME)
RetentionPolicy 共有三种策略,分别为:
SOURCE:这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面
CLASS:这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这些信息加载到JVM中。注:默认策略为CLASS类型
RUNTIME:表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的
3. MyAnnotation1中的@Documented
目的就是将这一Annotation的信息显示在JAVA API文档上,如果没有增加@Documented的话,JAVA API文档上不会显示相关annotation信息
4. MyAnnotation1中的@interface
关键字,表示该类为Annotation定义
5. MyAnnotation1中的 String value();
表示有一个成员参数,名字为value,访问权为默认(default)修饰符,注意以下两点:
访问权只能用public和默认(default)修饰
参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组
6.AnnotationDemo中的@MyAnnotation1("this is annotation1")
因为MyAnnotation1只有一个参数,因此可以直接在括号中写上value值。注:如果Annotation只有一个参数,则建议最好将该参数名称定义为value
7.TestAnnotation中的cls.isAnnotationPresent(MyAnnotation1.class)
判断该类是否使用了MyAnnotation1的注释
8. TestAnnotation中的MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class)
返回该类针对MyAnnotation1的注释
9. TestAnnotation中的method.isAnnotationPresent(MyAnnotation2.class)
判断该方法是否使用了MyAnnotation2的注释
- 浏览: 170657 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (159)
- java常用 (28)
- Spring Security (0)
- tomcat (2)
- orcale (4)
- rmi (6)
- jvm (5)
- html (0)
- hibernate (0)
- javascript (5)
- log4j (5)
- struts (5)
- jdbc (0)
- jquery (0)
- json (0)
- jstl (0)
- jboss (0)
- JCaptcha (0)
- jpa (0)
- oscache (0)
- 项目管理 (8)
- ExtJs (10)
- 设计模式 (3)
- jsp (3)
- 错误归档 (1)
- maven (5)
- java多线程 (10)
- quartz (4)
- spring (9)
- memcache (3)
- java笔试面试 (3)
- xml (3)
- hadoop (5)
- velocity (2)
- jetty (3)
- http (1)
- linux (2)
- hbase (2)
- mysql (12)
- mybatis (8)
- web安全 (1)
- hive (2)
- 其他 (1)
最新评论
发表评论
-
Java性能优化技巧
2013-03-30 11:19 712Java性能优化技巧 在JAVA程序中,性能问题的大部分原 ... -
java内部类的作用
2013-03-30 11:06 723java内部类的作用一、 ... -
StringTokenizer 用法
2013-03-25 09:29 1252StringTokenizer是一个用来分隔String的应 ... -
Java日志框架
2013-03-17 17:17 883Java日志框架 Log4j Ap ... -
java nio Buffer 中 compact的作用
2013-03-12 17:29 1666java nio Buffer 中 compact的作用 ... -
Java中assert关键字的实现
2013-03-08 17:12 1036Java中assert关键字的实现 J2SE 1.4 ... -
java正则表达式
2013-03-07 08:42 650众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判 ... -
java对cookie的操作
2013-03-10 10:31 786java对cookie的操作 java对cookie的操 ... -
eclipse中的.project 和 .classpath文件的具体作用
2013-02-27 16:38 667eclipse中的.project 和 .cla ... -
Java中Split函数的用法技巧
2013-02-25 13:48 1561Java中Split函数的用法 ... -
如何把安全证书导入到java中的cacerts证书库
2013-02-21 11:21 1920如何把安全证书导入到java中的cacerts证书库 在项 ... -
java Comparable Comparator 接口
2013-02-19 15:58 7521.什么是Comparable接口 此接口强行对实现它的每 ... -
java环境变量配置
2012-08-28 21:51 687java环境变量配置 windows xp下配置JDK环 ... -
Java应用程序添加退出事件响应
2012-08-22 20:37 1150一个完整的Java应用程序,通常至少要有一个应用程序的结束点。 ... -
java 读取 doc poi读取word中的表.txt
2012-08-22 20:34 1706import java.io.File; import j ... -
java压缩和解压缩例子
2012-08-21 21:26 1044java压缩和解压缩例子 压缩时,在压缩文件夹中新建目录,en ... -
Java反射,根据类名创建带参数的实例
2012-08-21 21:26 2183public Object dynCreateClassIns ... -
java异常时如何执行
2012-08-21 21:26 644代码如下: public class Test{ publi ... -
java 读写txt文件
2012-08-21 21:27 857java 读写txt文件 读取 ... -
Java transient关键字
2012-08-21 21:27 655Java transient关键字 Volatile修饰的成员 ...
相关推荐
Java Annotation入门,本文初步告诉你怎么使用java anotatin
java annotation入门,java annotation入门,java annotation入门,java annotation入门
以下是JAVA annotation入门基础,新手朋友们可以过来参考下。希望对你有所帮助
java annotation 从JDK5.0后提供的功能。里面包含的实例,我是为了学习这个,所以放到这个上面作为中转。从别人博客里面摘取,博客地址里面附有。
Java+Annotation入门[定义].pdf
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java...
JDK5.0 Annotation 入门介绍 PDF
Java Annotation的初学者的入门样例,让读者更快的了解Annotation的用法和语法。
java-注解Java注解入门教程
Annotation在java的世界正铺天盖地展开,有空写这一篇简单的annotations的文章,算是关于Annotation入门的文章吧,希望能各位们能抛砖,共同学习