注解的分类

 
按运行机制分:
 
源码注解:只在源码中存在,编译后不存在
编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnings)
运行时注解:能在程序运行时起作用(如spring的依赖注入)
 
按来源分:
 
来自JDK的注解
第三方的注解
自定义的注解
 
自定义注解
 
如下实例给出了自定义注解的基本方法
 package com.flypie.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,@Retention,@Inherited,@Documented
* 这四个是对注解进行注解的元注解,负责自定义的注解的属性
*/
@Target({ElementType.TYPE,ElementType.METHOD}) //表示注解的作用对象,ElementType.TYPE表示类,ElementType.METHOD表示方法
@Retention(RetentionPolicy.RUNTIME) //表示注解的保留机制,RetentionPolicy.RUNTIME表示运行时注解
@Inherited //表示该注解可继承
@Documented //表示该注解可生成文档
public @interface Design {
String author(); //注解成员,如果注解只有一个成员,则成员名必须为value(),成员类型只能为原始类型
int data() default 0; //注解成员,默认值为0
}

使用注解

 package com.flypie;

 import com.flypie.annotations.Design;

 @Design(author="flypie",data=100)    //使用自定义注解,有默认值的成员可以不用赋值,其余成员都要复值
public class Person {
@Design(author="flypie",data=90)
public void live(){ }
}

解析java注解

 package com.flypie;

 import java.lang.annotation.Annotation;
import java.lang.reflect.Method; import com.flypie.annotations.Design; public class Main { public static void main(String[] args) throws ClassNotFoundException { Class c=Class.forName("com.flypie.Person"); //使用类加载器加载类 //1、找到类上的注解
if(c.isAnnotationPresent(Design.class)){ //判断类是否被指定注解注解
Design d=(Design) c.getAnnotation(Design.class); //拿到类上的指定注解实例
System.out.println(d.data());
} //2、找到方法上的注解
Method[] ms=c.getMethods();
for(Method m:ms){
if(m.isAnnotationPresent(Design.class)){ //判断方法是否被指定注解注解
Design d=m.getAnnotation(Design.class); //拿到类上的指定注解实例
System.out.println(d.data());
}
} //3、另外一种方法
for(Method m:ms){
Annotation[] as=m.getAnnotations(); //拿到类上的注解集合
for(Annotation a:as){
if(a instanceof Design){ //判断指定注解
Design d=(Design) a;
System.out.println(d.data());
}
}
}
} }

Java注解入门的更多相关文章

  1. Java 注解 入门

    这几天在学习Spring3.x,发觉现在许多框架都用上了java注解功能,然后自己就对java注解这方面初步学习了一下. 首先,注解跟注释不是一个意思,也根本不是同一个事物. 注释就是我们平常平常中对 ...

  2. java注解入门(含源码下载)

    注解(Annotation)是从jdk1.5开始增加的特性.学习注解能够读懂框架的代码:让编程更加简洁,代码更加清晰. 注解概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法. ...

  3. Java 注解入门实例 && 注解传參

    參考 概念:java提供了一种原程序中的元素关联不论什么信息和不论什么元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已 ...

  4. Java 注解入门

    1.什么是注解 注解的语法: @注解名称; 注解的作用: 用来替代 xml 配置文件; 在 Servlet 3.0 中就可以使用注解来代替配置文件; 注解是由框架来读取使用的; 所有的注解都是 Ann ...

  5. [2]注解(Annotation)-- 深入理解Java:注解(Annotation)自定义注解入门

    转载 http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 深入理解Java:注解(Annotation)自定义注解入门 要深入学习 ...

  6. 深入理解Java:注解(Annotation)自己定义注解入门

    深入理解Java:注解(Annotation)自己定义注解入门 要深入学习注解.我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前.我们就必须要了解Java为我们提供的元注解和相关定义注解的 ...

  7. Spring框架入门之基于Java注解配置bean

    Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...

  8. JAVA - Annotation 注解 入门

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  9. java注解基础入门

    前言 这篇博客主要是对java注解相关的知识进行入门级的讲解,包括**,核心内容主要体现在对java注解的理解以及如何使用.希望通过写这篇博客的过程中让自己对java注解有更深入的理解,在工作中可以巧 ...

随机推荐

  1. 【转】SVN添加文件时的错误处理:...\conf\svnserve.conf:12: Option expected

    转载地址:http://www.linuxidc.com/Linux/2014-09/106683.htm 安装完SVN服务器,添加完用户权限后,准备将本地的项目add到服务器上时,报"C: ...

  2. #region Json转DataTable

    #region  Json转DataTable        private DataTable Json2Dtb(string json)        {            JavaScrip ...

  3. 读书笔记:《HTML5开发手册》

    一.HTML5中新的结构元素 1. HTML5初始文件 1.1.doctype 在之前,doctype的声明是这样的: <!DOCTYPE HTML PUBLIC "-//W3C//D ...

  4. Chapter 1: 随机事件及其概率

    1. 随机试验,样本点,样本空间 若试验具有下列特点: 在相同条件下可重复进行 每次试验的可能结果不止一个,且所有可能结果在实验前是已知的 实验前不能确定哪一个结果会发生 则称该试验为随机试验,常记为 ...

  5. 【转】CSS:table-cell详解

    table-cell这个家伙在国外的网站中偶有露头,天朝由于IE6.7这两个货泛滥成灾,难有发挥,那么,这个家伙到底能干些什么呢?先让我们来研究下table,那些年曾经使用的table布局为何如此辉煌 ...

  6. 我的git学习

    当遇到不想commit的,而status已经现实出来了,可以使用 git rm -r --cached "fine name or 文件夹" 出现   Git – fatal: U ...

  7. JS中parseInt()、Numer()深度解析

    JS中字符串转换为数字有两种方式: 1.parseInt函数 定义:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/ ...

  8. ZigBee 安全探究

    ZigBee 安全探究 0x02 ZigBee安全机制 (注:对于本节内容,可能在新版ZigBee协议标准中会有所变化,请以新版为准.) ZigBee主要提供有三个等级的安全模式: 1. 非安全模式: ...

  9. 尝试用md编辑器写博客, 内容为 jupyter笔记

    Matplotlib tutorial http://www.labri.fr/perso/nrougier/teaching/matplotlib/#introduction %matplotlib ...

  10. linux下使用多线程编写的聊天室

    自从开始学linux网络编程后就想写个聊天室,一开始原本打算用多进程的方式来写,可是发觉进程间的通信有点麻烦,而且开销也大,后来想用多线程能不能实现呢,于是便去看了一下linux里线程的用法,实际上只 ...