java反射的invoke方法

首先简单介绍两个元注解:
@retention是()   括号内参数作用时间 编译、运行、源码
@target()      括号内参数作用范围 变量,方法。。。。

//获取class对象
Class clazz = Class.forName("cn.ph.test.UserDao");
//获取对象方法
Method[] mds = clazz.getMethods();
//遍历
for(Method md : mds){
    /**
    *@MyTest.class 注解码对象
    *invake(Object obj,Object...args)
    */
  if(md.isAnnotationPresent(MyTest.class)){
    //如果当前的方法上有自定义MyTest注解,执行,否则忽略
    md.invoke(new UserDao());//方法对应的类
  }

    /*
    //getMethod第一个参数是方法名,第二个参数是该方法的参数类型(多个用,隔开),
    Method method = clazz.getMethod("test", String.class);
    //Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,
    //如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,
    //如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,
    //再将其返回
    String s = "aa";
    method.invoke(m,(Object)s);//报错时候,参数记得强转Object
    */

}

原文地址:https://www.cnblogs.com/hirampeng/p/9351097.html

时间: 2024-11-12 13:42:23

java反射的invoke方法的相关文章

java中的反射,invoke方法

invoke,就是通过函数名反射调用相应的函数.以下代码简单地介绍了java反射中invoke方法 package org.curry.tool; import java.lang.reflect.Method; public class InvokeMethods { public static void main(String[] args) {   Employee emp = new Employee();   Class cl = emp.getClass();//是Class,而不是

java中的反射,invoke方法[转]

在施老师的项目中需要用到invoke,就是通过函数名反射相应的函数.一下代码简单地介绍了java反射中invoke方法,如果要具体的,可以参考魔乐核心课程的反射部分内容 package org.curry.tool; import java.lang.reflect.Method; public class InvokeMethods { public static void main(String[] args) { Employee emp = new Employee(); Class c

乐字节Java反射之三:方法、数组、类加载器和类的生命周期

本文承接上一篇:乐字节Java发射之二:实例化对象.接口与父类.修饰符和属性 继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throws Exception { Class<?> clz = Class.forName("com.shsxt.ref.simple.User "); //获取属性 System.out.println("======

【java】method.invoke(方法底层所属对象/null,new Object[]{实际参数})

反射调方法时无论是静态/非静态,固定/可变参数,都有Object对象数组对参数进行包装. 1 package com.tn.clas; 2 3 import java.lang.reflect.Method; 4 import java.util.Arrays; 5 6 public class Client { 7 public static void main(String[] args) throws Exception { 8 Class<User> clas=User.class;

Java反射之剖析方法

继上篇反射构造函数后,今剖析函数方法. 要通过反射执行方法: 1.可以先反射出类或构造函数,创建实例对象,通过对象调用方法(反射通过构造函数创建对象参见上篇). 2.可以通过类反射出方法,传入关联对象,从而实现对象调用方法. 以下是一个简单测试类: 包含两个文件: 1.Person.java,用于反射操作 2.Deom:Demo_MtdRft.java,反射的测试代码 测试的情况包括:1.公有方法,2.私有方法,3.无参数方法,4.有参数方法,5静态方法 下面是两个测试代码文件: Person.

javassist:增强型的java反射工具,获取方法参数名

java的反射是不能获取方法的参数名的.比如: [java] view plaincopyprint? public String concatString(String str1,String str2){ return str1+str2; }     public String concatString(String str1,String str2){         return str1+str2;     } 想获取"str1",和"str1"这个参数

java反射调用私有方法和修改私有属性

//调用私有方法package com.java.test; public class PrivateMethod { private String sayHello(String name) { return "hello "+name; } } 测试: package com.java.test; import java.lang.reflect.Method; public class PrivateMethodTest { public static void main(Str

Java 反射调用动态方法

package com.pigetest.util; import java.lang.reflect.Method; public class PrivateMethodTestHelper { public static Object invoke(String clazzName,String methodName,Object...params){ try { Class<?> clazz=Class.forName(clazzName); Object obj=clazz.newIn

Java反射机制的学习

Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法). 也许你使用Java已经很长时间了,可是几乎不会用到Java反射机制.你会嗤之以鼻地告诉我,Java反射机制没啥用.或许在J2EE.J2SE等平台,Java反射机制没啥用(具体我也不了解,不多做评论),但是在Android应用开发中,该