java注解反射简单实例

摘要:
1、创建一个注解packagecom.anno;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Retention(RetentionPol

1、创建一个注解

packagecom.anno;

importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME) //表示注解在运行时依然存在
@Target(ElementType.METHOD) //表示注解可以使用在方法上
public @interfaceCallAnnotation {

    String phone() default "某某";; //表示注解须要一个参数,默认值为"某某"
}

2、创建一个person类,使用注解

packagecom.anno;


public classPerson {

    public voidcall( String phone) {
        System.out.println("call=>"+phone);
    }
    
    
    @CallAnnotation
    public voidcallByAnnotationDefault(String phone){
        System.out.println("callByAnnotationDefault=>"+phone);
    }
    
    
    @CallAnnotation(phone = "张三")
    public voidcallByUserAnnotation(String phone){
        System.out.println("callUserAnnotation=>"+phone);
    }


}

3、测试注解

packagecom.anno;

importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;

public classTestAnno {

    public static voidmain(String[] args)
            throwsIllegalAccessException, IllegalArgumentException, InvocationTargetException {
        
        Person person = new Person(); //创建person对象
        Method[] methods = Person.class.getDeclaredMethods(); //得到所有方法
        for(Method meth : methods) {
            CallAnnotation annoTemp = null;

            annoTemp = meth.getAnnotation(CallAnnotation.class); //得到注解对象
            System.out.println("调用方法名称:" +meth.getName());
            System.out.println("注释的对象信息:" +annoTemp);
            if (annoTemp != null) { //如果注解对象不为空,将参数值设为注解的值
meth.invoke(person, annoTemp.phone());
            } else{
                meth.invoke(person, "李四"); //如果注解对象为空,单独设置参数值
}

            System.out.println();
        }
    }

}

转 :https://www.cnblogs.com/2015android/p/4717348.html

免责声明:文章转载自《java注解反射简单实例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# JSON使用的常用技巧(二)升级Kubernetes 1.18前,你不得不知的9件事下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql导入千万级数据实操

前言 目标快速模拟数据一亿条, 存储过程效率太低, 找到个load data的方法, 从本地文件读数据插入到库表中, 正文如下 正文 切换引擎 查询引擎类型 SHOW CREATE TABLE igs_sm_interface_access_log; 查询结果 CREATE TABLE `igs_sm_interface_access_log` ( `...

一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL

一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL 介绍   不知道大家在使用 ASP.NET MVC 时有没有一些扩展要求,反正我是有很多。在使用 MVC 这几年(PS:我是从 1.0 开始学,2.0、3.0 开发至今),我深深地觉得 MVC 的扩展性真是太好了,几乎你大部分的“合理”需求,用 MVC 都能实现。好了,废话不多...

问题:C#控制台程序参数;结果:设置与读取C#控制台应用程序Main函数中的参数args

设置与读取C#控制台应用程序Main函数中的参数args在项目属性面版->调试->命令行参数设置。空格分隔。读取:string[] str = Environment.GetCommandLineArgs(); Main函数是C#应用程序的入口点,Main函数可以有四种签名,分别如下: static void Main() static vo...

使用JAVA调用KRPANO加密XML

KRPano自带的命令行工具krpanotools可以加密XML,具体的参数说明如下语法:   krpanotools32.exe encrypt [OPTIONS] inputfiles inputfiles 参数可以是任意个数的文件 (支持*) 选项:-h5 … 使用HTML5兼容的加密方式-bin … 使用仅支持Flash的加密方式-p ...

Java后台读取excel表格返回至Web前端

如果是做连接数据库的话,系统难度就降低了不少;这次本人也算是体会到数据库的方便了吧(不过以后云储存好像会更受欢迎些);比如说查询列出所有数据吧:数据库每个表每一列都有列名,正常的做法是遍历数据库表,dao层利用list储存实体对象集,数据库表中每一行记录一个实体的各个属性: public List<Account> list() {...

关于c++正则表达式的用法

本人最近在做一个项目,这个项目里面有一个功能是这样的,要求这个项目中提供搜索功能,简单的说,如果里面输入1-10 11,15,27,39这个字符串,那么你就要从中找到1,2,3,4,5,6,7,8,9,10和11,15,27,39等等这些数字。我考虑了很久,决定使用正则表达式来做,采用的原因有两点:其一,因为考虑到范围的问题(比如说位数不能超过三位)这样的...