`
oham_一1一
  • 浏览: 50018 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java 自定义annotation使用示例

阅读更多

Annotation 是一种用于描述数据的一种数据,在Java里所描述的数据指的是Java的程序代码,主要目的是为了让第三者能够从这些annotation当中得到一些信息,但也能用于实现某种业务上的操作,比如Spring中使用到的那些annotation,鄙人就是想像Spring那样使用annotation而作这篇笔记。

 

自定义一个annotation,TestMyAnno.java:

 

package learnHibernate.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno {
	public enum Member{OHAM, LULU, CANCAN, MAOMAO};
	
	Member member() default Member.OHAM;
	String birth();
}

 解析:

    1.@Target——用于指定该Annotation类型可以用在注释在哪些元素上,形如“@Target(value=METHOD)”表示只能用于注释方法,value可以指定以下:


 若一个自定义的annotation没有表示@Target,则该自定义的annotation可以用于任何的元素上。

 

   2.@Retention用于设定该annotation保留到什么时候,通过RetentionPolicy这个enum类型指定,有三个值:CLASS,代表保留到编译好的class文件中,但执行的时候并不会把annotation的数据加载到JVM当中,默认值,用在不想给源码别人,但又想让别人知道一些源码里的信息;SOURCE,代表保留到源码当中,如@Override那样的作用;RUNTIME,代表会保留到class文件当中,并且执行的时候也会加载到JVM当中,即runtime的时候,我们可以取出annotation的信息用于实现业务逻辑,如Spring的annotation那般。

   3.@Document,用于生产Doc文档用,想@Deprecated那样。

   4.@Inherited,用于类之间的继承,当父类使用了annotation,这些annotation类型以及其所设定的参数值并不会一并继承给父类的子类,若想让annotation的数据可以继承给子类,需要给该annotation标上@Inherited,注意,@Inherited只对类有作用,所以使用了@Inherited的annotation只能使用在类上(接口也不行)。

 

测试代码:TestMyAnno.java,TestMyAnno类被@MyAnno注释,鄙人直接在其main方法里做测试。。。

package learnHibernate.bean;

import learnHibernate.annotations.MyAnno;
import learnHibernate.annotations.MyAnno.Member;

@MyAnno(member=Member.LULU, birth="2000/1/12")
public class TestMyAnno {

	public static void main(String[] args) {
		
		Class cls = TestMyAnno.class;
		
		//判断cls是否有被@MyAnno标注
		boolean hasMyAnno = cls.isAnnotationPresent(MyAnno.class);
		
		if(hasMyAnno) {
			//获取当前被@MyAnno标注的class的MyAnno对象
			MyAnno anno = (MyAnno)cls.getAnnotation(MyAnno.class);
			System.out.println(anno.birth() + "  " + anno.member());
			
			//这里只是玩玩printf怀念下,不必介意
			System.out.printf("%s   %s", anno.member(), anno.birth());
		}
		
	}
	
	
	
}

 

  • 大小: 10.3 KB
分享到:
评论

相关推荐

    自定义Annotation例子

    自定义Annotation的例子,博客地址:http://blog.csdn.net/yirentianran/article/details/52816764

    注解Annotation实现原理与自定义注解例子.pdf

    注解Annotation实现原理与自定义注解例子 每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工 作,就可以考虑使用注解来简化与自动化该过程。 Java提供了四种元注解,专门负责新注解的创建工作

    Java基础之注解Annotation初入篇_刘永雷

    学习java自定义注解的小例子,处理运行时注解方法,可以结合博客学习,博客地址: http://blog.csdn.net/liuyonglei1314/article/details/59494503

    自定义java注解+AOP实现自动监测注解和使用

    我们在项目开发过程中,可能会对一些公用方法抽成工具类进行使用。如果我们把这些方法再抽成注解的形式,在一些业务情况下是否更灵活一些呢? 示例是纯净的,只引入了需要的架包,启动后直接访问:ip:port/user/test ...

    java高级特性,涵盖了多种java常用的一些例子

    涉及多种线程,死锁,同步队列,异步线程,涵盖了java的自定义注解及反射,包含了23种设计模式,含注释, 线程1(基本应用) 线程2(同步,死锁,线程池) 注解和泛型 Java 注解(Annotation)又称 Java 标注,是 ...

    Java注解处理器简单实例

    主要介绍了Java注解处理器简单实例,具有一定借鉴价值,需要的朋友可以参考下

    JAVA上百实例源码以及开源项目源代码

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    Java测试新技术TestNG和高级概念.part1

    6.6 编写自定义Annotation 6.7 本章小结 第7章 闲言碎语 7.1 动机 7.2 TestNG哲学 7.3 关注和提供异常 7.4 有状态的测试 7.5 测试驱动开发的缺点 7.6 测试私有方法 7.7 测试与封装 7.8 调试器的威力 7.9 记日志的...

    JAVA上百实例源码以及开源项目

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    Java测试新技术TestNG和高级概念.part2

    6.6 编写自定义Annotation 6.7 本章小结 第7章 闲言碎语 7.1 动机 7.2 TestNG哲学 7.3 关注和提供异常 7.4 有状态的测试 7.5 测试驱动开发的缺点 7.6 测试私有方法 7.7 测试与封装 7.8 调试器的威力 7.9 记日志的...

    java开源包8

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包4

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包101

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包11

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包6

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包9

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包10

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包5

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    Java枚举类的使用与注解

    一、枚举类的使用: 1.枚举类的理解:类的对象只有有限个,确定的。我们称此为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类。 3.如果枚举类中只有一个对象,则...二、常见的Annotation 示例: 六、JDK中的元

Global site tag (gtag.js) - Google Analytics