注解类代码,注解的属性可以有多个:

package reflect;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; /***
* java注解默认只会保留在字节码文件里面
* 运行期间注解会被抹掉
* 可以用@Retention来指定注解的保留时间
* 注:
* @Retention是元注解,即用来解释其他注解的注解
* Retentionpolicy.RUNTIME是表示注解保留到运行时。
* @author zlq1252
*
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
/*
* 注解的属性
    *
   *注解可以有多个属性。
   *如果属性名为value时,可以不制定属性名(只有一个属性时)
*/
public String value();
}

方法类,在方法类的方法上加上注解代码如下:

package reflect;

public class C {

    public void f1() {
// TODO Auto-generated method stub
System.out.println("C'S f1");
}
@Test(value="淡淡")
public void hello() {
// TODO Auto-generated method stub
System.out.println("C'S hello");
}
@Test(value="洋洋")
public void bala() {
// TODO Auto-generated method stub
System.out.println("C'S bala");
}
}

反射类代码,通过反射类获得所有具有代码注解的方法并执行,同时可以过的注解的属性:

package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner; public class TestCase3 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String className = sc.nextLine();
Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
Method[] methods = clazz.getDeclaredMethods();
for(Method mh:methods){
//获得加在方法前面的@Test
Test test = mh.getDeclaredAnnotation(Test.class);
System.out.println("@Test:"+test);
//执行带有注解的方法
if(test!=null){
mh.invoke(obj);
//读取@Test的属性值
String v1 = test.value();
System.out.println("@Test的属性值:"+v1);
}
}
} }

Java反射+注解案例的更多相关文章

  1. 【译】8. Java反射——注解

    原文地址:http://tutorials.jenkov.com/java-reflection/annotations.html ================================== ...

  2. java反射--注解的定义与运用以及权限拦截

    自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...

  3. java反射注解妙用-获取所有接口说明

    转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shiro实现restful接口权限管理,对整个项目都进 ...

  4. JAVA-注解(2)-自定义注解及反射注解

    自定义注解开发 1.开发一个注解类 开发一个注解类的过程,非常类似于开发一个接口,只不过需要通过@interface关键字来声明 2.使用元注解修饰注解的声明 所谓的原注解是用来修饰注解声明的注释,可 ...

  5. Java 反射机制学习资料

    Java反射——引言 Java反射——Class对象 Java反射——构造函数 Java反射——字段 Java反射——方法 Java反射——Getter和Setter Java反射——私有字段和私有方 ...

  6. Java反射——引言

    Java反射——引言 原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它 ...

  7. 【译】1. Java反射——引言

    原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它可以在运行时检查类.接 ...

  8. 【译】2. Java反射——Class对象

    原文地址:http://tutorials.jenkov.com/java-reflection/classes.html ====================================== ...

  9. 【译】3. Java反射——构造函数

    原文地址:http://tutorials.jenkov.com/java-reflection/constructors.html ================================= ...

随机推荐

  1. 常见的25个顶级PHP模板引擎

    为了找到一个好的模板引擎,我在互联网上进行搜索,目前已经整理出了以下名单: SmartySmarty的特点是将模板编译成PHP脚本,然后执行这些脚本.很快,非常灵活. Heyes Template C ...

  2. jeecg3.8popup弹出窗口触发失去焦点事件,引发验证弹窗,影响体验问题的解决办法

    在初始化表单的代码中添加以下加粗部分,有几个popup就定义几个标志位,主要是防止第一次失去焦点时候的弹窗(此时还未来得及选择),提交表单的时候还是会正常校验的. //popup触发失去焦点事件,设置 ...

  3. 从今天开始学习Swift--关于Swift (转)

    WWDC2014推出了新的编程语言,大家都站在了新的起跑线上,希望转发的本文能对园内的朋友一点介绍和帮助,如果大家对swift感兴趣,欢迎踊跃利用google. 原文地址:http://www.coc ...

  4. python模块详解 time与date time

    模块的分类: a:标准库 内置模块 如sys,os等 b:开源模块 大神封装好的 直接可以拿来用的. c:自定义模块 自己封装的模块 Python中通常表示时间的方式有:时间戳.格式化的日期.元组(九 ...

  5. dell Nx000系列交换机

    dell n2048(P) dell n3048(P) dell n4064(F) P: PoE+ F: SFP+ Model GbE 10GbE(SFP+) 40GbE(QSFP+) Layer d ...

  6. Linux命令之创建文件夹3

    1)mkdir  fyr即可在当前目录下创建一个文件夹 2)在fyr文件夹下创建一个子目录 mkdir fyr/fyr1 注意:如果不存在父层目录直接创建对应父层目录下的子目录mkdir  FYR/f ...

  7. ES7的Async/Await的简单理解

    Async/Await 的个人见解 正文: async,顾名思义,一个异步执行的功能,而 await 则是配合 async 使用的另一个关键字,也是闻字识其意,就是叫你等待啦! 二者配合食用效果更佳哦 ...

  8. MySQL的基础(优化)1

    1,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小 2,在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值 3,对于某 ...

  9. 超好用的一个JQUERY分页器-jpaginate

    jpaginate是一个自带滑动动画效果的jQuery分页插件,用户可以通过单击或只是悬停在箭头上的使页码滑动显示. 你可以用下面的方式调用插件: $(elementID).paginate() 您可 ...

  10. API:access_token

    access_token存在意义:   1.身份验证(一个channel_id一般有0个或1个有效的access_token) 2.限制用户访问服务器数据的有效期 3.限制用户访问权限 access_ ...