JAVA 注解详解及简单实例

JAVA 注解详解及简单实例

何为注解

注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是:

生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档

跟踪代码的依赖性  可以通过注解替代配置文件,简化项目的配置。现有的许多框架都采用这个功能减少自己的配置。

编译检查  在编译时进行格式检查,例如@Override

基础注解

Java目前内置了三种标准注解,以及四种元注解。四种元注解负责创建其他的注解。

三种标准注解

@Override,表示当前的方法覆盖超类中的方法

@Deprecated,如果程序员使用被这个注解注释的元素,则编译器会进行提示

@Suppress Warnings,忽略编译器的警告

四种元注解

@Target,表示注解的适用范围,例如@Target(ElementType.FIELD).

ElementType的枚举值有

CONSTRUCTOR,用于构造方法

FIELD,用于字段声明,包括常量

LOCAL_VARIABLE,用于局部变量

METHOD,用于方法

PACKAGE,用于包声明

PARAMETER,用于参数声明

TYPE,用于类,接口

@Retention,表示注解的保留级别,例如@Retention(RetentionPolicy.RUNTIME).

RetentionPolicy的枚举值有

Source,注解将被编译器丢弃

Class,注解可以在class文件中使用,但是会被VM丢弃

Runtime,在VM的运行期间也会保留

@Document,将次注解在javaDoc文件中可见

@Inherited,允许子类继承父类中的注解

自定义注解

创建注解

package com.rainman.annotation;

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)
public @interface MethodLog {

  String method() default "do something";

  String opeator() default "someone";

}

@interface标明该类型是一个注解的定义

对于“String method() default "dong something";”来说String是注解参数的数据类型,method是参数名,default用来设置默认值

注解的使用

package com.rainman.controller;

import com.rainman.annotation.MethodLog;

public class CelebrateController {

  @MethodLog(method="celebrate birthday",operator="we")
  public void celebrateBirthday(){

  }

  @MethodLog(operator = "we")
  public void celebrateNewYears(){

  }

  @MethodLog(method="celebrate harvest")
  public void celebrateHarvest(){

  }

  @MethodLog
  public void yeah(){

  }
}

注解使用的格式为"@Annotation(para=xxxx,...)",Annotation是注解名,para是注解中设置的参数名,参数如果不设置值,则会使用默认值

设置注解解析器

package com.rainman.annotation;

import com.rainman.controller.CelebrateController;
import java.lang.reflect.Method;

public class MethodLogParse {

  public static void parse(Class classType) throws Exception{
    Method[] array = classType.getMethods();
    for(Method method : array){
      System.out.println("=================="+method.getName()+"=================");
      if(method.isAnnotationPresent(MethodLog.class)){
        MethodLog methodLog = method.getDeclaredAnnotation(MethodLog.class);
        String str = String.valueOf(methodLog.operator());
        String str1 = String.valueOf(methodLog.method());

        System.out.println(str + " " + str1);
      }

    }
  }

  public static void main(String[] args){
    try {
      MethodLogParse.parse(CelebrateController.class);
    }catch(Exception e){
      e.printStackTrace();
    }
  }
}

输出结果为

==================celebrateBirthday=================
we celebrate birthday
==================yeah=================
someone do something
==================celebrateNewYears=================
we do something
==================celebrateHarvest=================
someone celebrate harvest
==================wait=================
==================wait=================
==================wait=================
==================equals=================
==================toString=================
==================hashCode=================
==================getClass=================
==================notify=================
==================notifyAll=================

通过反射机制,遍历方法,然后获取方法的注解。注解可以注解类,方法,字段等等,所以也可以通过类似的方式获取这些对象的注解,然后进行处理。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java自定义注解实现Redis自动缓存的方法

    在实际开发中,可能经常会有这样的需要:从MySQL中查询一条数据(比如用户信息),此时需要将用户信息保存至Redis. 刚开始我们可能会在查询的业务逻辑之后再写一段Redis相关操作的代码,时间长了后发现这部分代码实际上仅仅做了Redis的写入动作,跟业务逻辑没有实质的联系,那么有没有什么方法能让我们省略这些重复劳动呢? 首先想到用AOP,在查询到某些数据这一切入点(Pointcut)完成我们的切面相关处理(也就是写入Redis).那么,如何知道什么地方需要进行缓存呢,也就是什么地方需要用到AO

  • Java 什么是注解及注解原理详细介绍

    Java 注解的原理 java : 注解使用,http://www.jb51.net/article/101747.htm 什么是注解 注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解.它主要的作用有以下四方面: 生成文档,通过代码里标识的元数据生成javadoc文档. 编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证. 编译时动态处理,编译

  • java @interface 注解详解及实例

    java @interface 注解详解及实例 1 简介 在Java中,定义注解其实和定义接口差多不,只需要在interface前添加一个@符号就可以,即 @interface Zhujie{ },这就表明我们定义了一个名为 @Zhujie 的注解.注解中的每一个方法定义了这个注解类型的一个元素,特别注意:注解中方法的声明中一定不能包含参数,也不能抛出异 常:方法的返回值被限制为简单类型.String.Class.emnus.注释,和这些类型的数组,但方法可以有一个缺省值. 注解相当于一种标记,

  • java基于spring注解AOP的异常处理的方法

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...finally对异常进行处理,但是我们真的能在写程序的时候处理掉所有可能发生的异常吗? 以及发生异常的时候执行什么逻辑,返回什么提示信息,跳转到什么页面,这些都是要考虑到的. 二.基于@ControllerAdvice(加强的控制器)的异常处理 @ControllerAdvice注解内部使用@Except

  • 深入理解Java注解类型(@Annotation)

    Java注解是在JDK5时引入的新特性,鉴于目前大部分框架(如spring)都使用了注解简化代码并提高编码的效率,因此掌握并深入理解注解对于一个Java工程师是来说是很有必要的事.本篇我们将通过以下几个角度来分析注解的相关知识点 理解Java注解 实际上Java注解与普通修饰符(public.static.void等)的使用方式并没有多大区别,下面的例子是常见的注解: public class AnnotationDemo { //@Test注解修饰方法A @Test public static

  • java javax.annotation.Resource注解的详解

    java 注解:java javax.annotation.Resource  当我们在xml里面为类配置注入对象时,会发现xml文件会越来越臃肿,维护起来很麻烦.这时候我们可以使用注解这种机制来为类配置注入对象. Java为我们提供了 javax.annotation.Resource这个注解. spring框架提供了org.springframework.beans.factory.annotation.Autowired. 一般情况下我们使用 javax.annotation.Resour

  • java中@ModelAttribute注解的作用

    问题描述:当我们使用表单传值得时候,如果定义了,name,address,age.等属性,那么通过表单传过去的值就只有这3个属性,但是我们需要的name,pass,address,age等四个属性.那么在提交表单并赋值的时候就会出现,未得到的值为null的情况.如下图: 获取的pass为null 那么我们需要用@ModelAttribute注解来解决他: 实现代码如下: @ModelAttribute public void getUsers(@RequestParam(value="name&

  • java 注解annotation的使用以及反射如何获取注解

     一.注解基本知识 1.元注解 元注解是指注解的注解.包括  @Retention @Target @Document @Inherited四种. 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口. 2. 参数成员只能用public或默认(default)这两个访问权修饰 3. 参数成员只能用基本类型byte,short,char,int,long,float,doubl

  • Java 中的注解详解及示例代码

    在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行. 注解可以做什么 Java中的注解通常扮演以下角色 编译器指令 构建时指令 运行时指令 其中 Java内置了三种编译器指令,本文后面部分会重点介绍 Java注解可以应用在构建时,即当你构建你的项目时.构建过程包括生成源码,编译源码,生成xml文件,打包编译的源码和文件到JAR包等.软件的构建通常使用诸如Apache Ant和Mav

  • JAVA 注解详解及简单实例

    JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖性  可以通过注解替代配置文件,简化项目的配置.现有的许多框架都采用这个功能减少自己的配置. 编译检查  在编译时进行格式检查,例如@Override 基础注解 Java目前内置了三种标准注解,以及四种元注解.四种元注解负责创建其他的注解. 三种标准注解 @Override,表示当前的方法覆盖超类中

  • java 多态性详解及简单实例

    Java中多态性的实现 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 多态的作用:消除类型之间的耦合关系. 现实中,关于多态的例

  • java 爬虫详解及简单实例

    Java爬虫 一.代码 爬虫的实质就是打开网页源代码进行匹配查找,然后获取查找到的结果. 打开网页: URL url = new URL(http://www.cnblogs.com/Renyi-Fan/p/6896901.html); 读取网页内容: BufferedReader bufr = new BufferedReader(new InputStreamReader(url.openStream())); 正则表达式进行匹配: tring mail_regex = "\\w+@\\w+

  • Android AOP 注解详解及简单使用实例(三)

    Android  注解 相关文章: Android AOP注解Annotation详解(一) Android AOP之注解处理解释器详解(二) Android AOP 注解详解及简单使用实例(三) 一.简介 在Android 里面 注解主要用来干这么几件事: 和编译器一起给你一些提示警告信息. 配合一些ide 可以更加方便快捷 安全有效的编写Java代码.谷歌出的support-annotations这个库 就是主要干这个的. 和反射一起 提供一些类似于spring 可配置的功能,方便简洁. 二

  • Java File类的详解及简单实例

    Java File类的详解及简单实例 1. File():构造函数,一般是依据文件所在的指定位置来创建文件对象.  CanWrite():返回文件是否可写. CanRead():返回文件是否可读. CompareTo(File pathname):检查指定文件路径间的顺序. Delet():从文件系统内删除该文件. DeleteOnExit():程序顺利结束时从系统中删除文件. Equals(Object obj):检查特定对象的路径名是否相等. Exists():判断文件夹是否存在. GetA

  • java StringBuilder类的详解及简单实例

     java  StringBuilder类的详解及简单实例 实现代码: public class StringBuilderTest { /** * @param args */ public static void main(String[] args) { StringBuilder sb = new StringBuilder(); // 追加字符串 sb.append("java");//sb = "java" // 插入 sb.insert(0 , &qu

  • java  StringBuilder类的详解及简单实例

     java  StringBuilder类的详解及简单实例 实现代码: public class StringBuilderTest { /** * @param args */ public static void main(String[] args) { StringBuilder sb = new StringBuilder(); // 追加字符串 sb.append("java");//sb = "java" // 插入 sb.insert(0 , &qu

  • mybatis分页插件pageHelper详解及简单实例

    mybatis分页插件pageHelper详解及简单实例 工作的框架spring springmvc mybatis3 首先使用分页插件必须先引入maven依赖,在pom.xml中添加如下 <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.5

  • Java Cache详解及简单实现

     Java Cache详解及简单实现 概要: 最近在做spring的项目,想做一个缓存,访问数据库,定期来做数据更新 要实现两个功能 可以通过http请求来立刻刷新缓存 缓存可以通过自己配置的时间间隔来定期刷新 通过Controller来做 因为需要通过http来刷新缓存,所以第一个想法就是把缓存做成一个Controller Controller的实现 Controller最大的优势,就是可以通过Spring的配置,注入很多依赖,比如对Service的依赖,对数据库的依赖等. 大量的访问数据库跟

  • jax-ws handler 的详解及简单实例

     jax-ws handler 的详解及简单实例 aop技术一般用于某个对象的函数调用的日志,认证等. webservice是远程的函数调用,也需要类似的aop方法,举例jax-ws的webservice,handler就相当于aop. 举一例jax-ws handler例子 先写个webservice import javax.jws.HandlerChain; import javax.jws.WebMethod; import javax.jws.WebService; @WebServi

随机推荐