概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。

Java中的常见注解

JDK自带注解:

@Override//覆盖父类的方法

@Deprecated//表示方法过时了

@SuppressWarnings("deprecation")//忽略deprecation警告

常见第三方注解:

Spring : @Autowired        @Service          @Repository

Mybatis :@InsertProvider       @UpdateProvider             @Options

注解的分类

按照运行机制分:

1.源码注解:注解只在源码中存在,编译成.class文件就不存在了

2.编译时注解:注解在源码和.class文件中都存在(jdk自带注解)

3.运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解

按照来源分:

1.来自JDK的注解

2.来自第三方的注解

3.我们自己定义的注解

元注解:注解的注解

 @Target({ElementType.METHOD,ElementType.TYPE})/**注解的作用域
//CONSTRUCTOR(构造方法声明)、FIELD(字段声明)、LOCAL_VARIABLE(局部变量声明)
//METHOD(方法声明)、PACKAGE(包声明)、TYPE(类、接口)
*/
@Retention(RetentionPolicy.RUNTIME) /**
//声明周期RUNTIME(运行时存在,可以通过反射读取)、
//CLASS(编译时会纪录到class中,运行时忽略)、
//SOURCE(只在源码显示,编译时会丢弃)*/
@Inherited/**允许子类继承注解,对接口无效,对类有效;只继承类的注解,类下的方法的注解无法继承*/
@Documented/**生成javadoc时包含注解*/
public @interface Description{//使用@interface关键字定义注解
/**
* 成员以无参无异常方式声明
* 成员类型是受限的,合法的类型包括原始类型及String,Class,Annotation,Enumeration
* 可以用default为成员指定一个默认的值
* 如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
* 注解类可以没有成员,没有成员的注解称为标识注解
*/
// String desc();
// String author();
// int age() default 18;
String value();
}

创建注解

 public interface Person {
public String name();
@Deprecated
//表示方法过时了
public int age();
}

创建接口

 @Description("i am class")
public class Child implements Person {
@Override
@Description("i am method")
public String name() {
return null;
}
@Override
public int age() {
return 0;
}
}

实现接口

 public class Test {

     @SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
try {
//1.使用类加载器加载类
Class c = Class.forName("com.wzyy.zujie.Child");
//2.找到类上面的注解,判断这个类com.wzyy.zujie.Child上是否存在Description.class这个注解
boolean isExist = c.isAnnotationPresent(Description.class);
if(isExist){
//3.拿到注解实例
Description d = (Description) c.getAnnotation(Description.class);
System.out.println(d.value());//i am class
}
//4.找到方法上的注解
Method[] ms = c.getMethods();
for(Method m:ms){
//第一种解析方法,判断这个方法上是否存在Description注解
// boolean isMExist = m.isAnnotationPresent(Description.class);
// if(isMExist){
//存在就得到这个方法上的Description注解
// Description d = m.getAnnotation(Description.class);
// System.out.println(d.value());//i am method
// }
//第二种解析方法,得到这个方法上所有的注解,判断是否是Description
Annotation[] as =m.getAnnotations();
for(Annotation a:as){
if(a instanceof Description){
Description d = (Description) a;
System.out.println(d.value());//i am method
} }
} } catch (ClassNotFoundException e) {
e.printStackTrace();
} }
// /**使用注解的语法:@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>....)*/
// @Description(desc="aaa",author="bb",age=22)
// public String eyeColor(){
// return "red";
// }
}

测试类解析注解

Java注解的使用的更多相关文章

  1. Java注解

    Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...

  2. 19.Java 注解

    19.Java注解 1.Java内置注解----注解代码 @Deprecated                                    //不推荐使用的过时方法 @Deprecated ...

  3. Java注解入门

    注解的分类   按运行机制分:   源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...

  4. java注解(Annotation)解析

    注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...

  5. JAVA 注解的几大作用及使用方法详解

    JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...

  6. attilax.java 注解的本质and 使用最佳实践(3)O7

    attilax.java 注解的本质and 使用最佳实践(3)O7 1. 定义pojo 1 2. 建立注解By eclipse tps 1 3. 注解参数的可支持数据类型: 2 4. 注解处理器 2 ...

  7. paip.java 注解的详细使用代码

    paip.java 注解的详细使用代码 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...

  8. JAVA 注解的几大作用及使用方法详解【转】

    java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...

  9. 框架基础——全面解析Java注解

    为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...

  10. Java注解配置

    Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annota ...

随机推荐

  1. JavaScript学习笔记-正则表达式(RegExp对象)

    正则表达式(RegExp对象)   1.正则表达式字面量,在脚本加载后编译.若你的正则表达式是常量,使用这种方式可以获得更好的性能,重复使用时不会重新编译: 2.使用构造函数创建的RegExp,提供了 ...

  2. JavaScript 使用反斜杠对代码行进行折行

    JavaScript对代码行进行折行-使用反斜杠 您可以在文本字符串中使用反斜杠对代码行进行换行.下面的例子会正确地显示: <html> <head> <script t ...

  3. iOS 获取User-Agent

    第一种方法 UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];    NSString *userAgent = [w ...

  4. iOS开发--Swift 基于MVC设计模式的简单的tableViewDemo

    如果说MVC是最好的设计模式, 可能很多人并不赞同, 但是如果说MVC是最主流, 应用面最广的设计模式, 我想这是毫无争议的. 不说废话, 直接演示在Swift中如何使用MVC新建工程(我并没有新建文 ...

  5. 【Andorid】短视频拍摄SDK——Vitamio Recorder 2.0 发布(支持ffmpeg命令行)

    简介 VCamera SDK Android 版(短视频拍摄SDK)是炫一下(北京)科技有限公司推出的软件开发工具包,为Android开发者提供简单.快捷的接口,帮助开发者实现Android平台上的短 ...

  6. OC 多态

    OC 多态 多态的概念 没有继承,就没有多态 不同类的对象能够定义相同名称的方法 当父类对象的指针或引用指向子类对象时,会进行动态监测,调用真实的方法 C++只有虚函数才能实现多态,OC中所有方法都可 ...

  7. 详解DB2 sqlstate 57016 原因码 "7"错误

  8. Mysql hql字符串字段中是否包含某个字符串,用 find_in_set

    有这样一个需求,在Mysql数据库字符串字段(权限)中,有范围在 1 到 N 之间代表不同权限的值,分别被','分开,现在要取出具有某权限的所有成员列表. 创建表: 1 CREATE TABLE us ...

  9. spring 整合 ActiveMQ

    1.1     JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到 ...

  10. 使用axis调用WebService服务端

    由于项目中要调用其他公司的接口,研究了下axis调用webService这种方式,现将代码贴出,以备以后查阅: package com.xbq; import javax.xml.namespace. ...