全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java 自定义注解及利用反射读取注解的实例

一、自定义注解

元注解: 

@interface注解: 定义注解接口

@Target注解: 用于约束被描述的注解的使用范围,当被描述的注解超出使用范围则编译失败。如:ElementType.METHOD,ElementType.TYPE;

@Retention 注解:用于约束被定义注解的作用范围,作用范围有三个:

1、RetentionPolicy.SOURCE:作用范围是源码,作用于Java文件中,当执行javac时去除该注解。

2、RetentionPolicy.CLASS:作用范围是二进制码,就是存在于class文件中,当执行Java时去除该注解。

3、RetentionPolicy.RUNTIME:作用范围为运行时,就是我们可以通过动态获取该注释。

@Documented:用于指定javadoc生成API文档时显示该注释。

@Inherited用于指定被描述的注释可以被其描述的类的子类继承,默认情况是不能被其子类继承。

自定义注解接口:

package com.java.annotation;

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.METHOD,ElementType.TYPE})
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation_my {
 
 String name() default "张三";//defalt 表示默认值
 
 String say() default "hello world";
 
 int age() default 21;
 
}

接下来我们定义一个接口:

package com.java.annotation;

@Annotation_my //使用我们刚才定义的注解
public interface Person {
 
 @Annotation_my
 public void name();
 
 @Annotation_my
 public void say();
 
 @Annotation_my
 public void age();

}

接口定义好了,我们就可以写接口的实现类了(接口不能实例化)

package com.java.annotation;

@Annotation_my
@SuppressWarnings("unused")
public class Student implements Person {
 
 private String name;

 @Override
 @Annotation_my(name="流氓公子") //赋值给name 默认的为张三
//在定义注解时没有给定默认值时,在此处必须name赋初值
 public void name() {
  
 }


 @Override
 @Annotation_my(say=" hello world !")
 public void say() {
  
 }

 @Override
 @Annotation_my(age=20)
 public void age() {
  
 }
}

然后我们就编写一个测试类测试我们的注解

package com.java.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Text {
 Annotation[] annotation = null;

 public static void main(String[] args) throws ClassNotFoundException {
  new Text().getAnnotation();
 }
 
 public void getAnnotation() throws ClassNotFoundException{
  Class<?> stu = Class.forName("com.java.annotation.Student");//静态加载类
  boolean isEmpty = stu.isAnnotationPresent(com.java.annotation.Annotation_my.class);//判断stu是不是使用了我们刚才定义的注解接口if(isEmpty){
   annotation = stu.getAnnotations();//获取注解接口中的
   for(Annotation a:annotation){
    Annotation_my my = (Annotation_my)a;//强制转换成Annotation_my类型
    System.out.println(stu+":\n"+my.name()+" say: "+my.say()+" my age: "+my.age());
   }
  }
  Method[] method = stu.getMethods();//
  System.out.println("Method");
  for(Method m:method){
   boolean ismEmpty = m.isAnnotationPresent(com.java.annotation.Annotation_my.class);
   if(ismEmpty){
    Annotation[] aa = m.getAnnotations();
    for(Annotation a:aa){
     Annotation_my an = (Annotation_my)a;
     System.out.println(m+":\n"+an.name()+" say: "+an.say()+" my age: "+an.age());
    }
   }
  }
  //get Fields by force
  System.out.println("get Fileds by force !");
  Field[] field = stu.getDeclaredFields();
  for(Field f:field){
   f.setAccessible(true);
   System.out.println(f.getName());
  }
  System.out.println("get methods in interfaces !");
  Class<?> interfaces[] = stu.getInterfaces();
  for(Class<?> c:interfaces){
   Method[] imethod = c.getMethods();
   for(Method m:imethod){
    System.out.println(m.getName());
   }
  }
 }

}

以上这篇Java 自定义注解及利用反射读取注解的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# java  # 自定义注解  # 反射  # Java利用反射如何查找使用指定注解的类详解  # 浅谈Java自定义注解和运行时靠反射获取注解  # Java基于反射机制实现全部注解获取的方法示例  # Java注解与反射原理说明  # java基础之反射和泛型以及注解  # Java利用自定义注解、反射实现简单BaseDao实例  # 浅谈java反射和自定义注解的综合应用实例  # Java通过反射访问注解信息的方法示例  # Java中的注解和反射实例详解  # java中反射和注解的简单使用方法  # 自定义  # 子类  # 给大家  # 默认值  # 好了  # 可以通过  # 希望能  # 这篇  # 转换成  # 小编  # 大家多多  # 就可以  # 作用于  # 加载  # 文档  # 使用了  # import  # annotation  # lang  # public 


相关文章: 海南网站制作公司有哪些,海口网是哪家的?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  c# 在高并发场景下,委托和接口调用的性能对比  七夕网站制作视频,七夕大促活动怎么报名?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  深圳网站制作平台,深圳市做网站好的公司有哪些?  模具网站制作流程,如何找模具客户?  Swift中swift中的switch 语句  东莞专业制作网站的公司,东莞大学生网的网址是什么?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站之星如何开启自定义404页面避免用户流失?  一键网站制作软件,义乌购一件代发流程?  如何在建站宝盒中设置产品搜索功能?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  Android滚轮选择时间控件使用详解  建站主机CVM配置优化、SEO策略与性能提升指南  如何在万网ECS上快速搭建专属网站?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  建站主机默认首页配置指南:核心功能与访问路径优化  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  宝塔新建站点为何无法访问?如何排查?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  代刷网站制作软件,别人代刷火车票靠谱吗?  浅谈Javascript中的Label语句  浅析上传头像示例及其注意事项  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  免费网站制作appp,免费制作app哪个平台好?  如何使用Golang安装API文档生成工具_快速生成接口文档  如何通过PHP快速构建高效问答网站功能?  个人网站制作流程图片大全,个人网站如何注销?  如何通过WDCP绑定主域名及创建子域名站点?  在线教育网站制作平台,山西立德教育官网?  建站VPS推荐:2025年高性能服务器配置指南  Swift中循环语句中的转移语句 break 和 continue  如何快速搭建支持数据库操作的智能建站平台?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何在万网主机上快速搭建网站?  如何通过免费商城建站系统源码自定义网站主题与功能?  如何快速查询网址的建站时间与历史轨迹?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  招商网站制作流程,网站招商广告语?  全景视频制作网站有哪些,全景图怎么做成网页? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。