Java反射详解(Spring配置)
1. 反射原理
a).运行时通过 Class c = Class.forName("com.hua.xx.DynTest")加载类文件
b).通过 DynTest t = c.newInstance()生成实例
c).通过 class.getMethod方法获取对应的method
d).method.invoke(t, args)调用方法
public class ReflectTest {
public void sayHello( String ss ){
System.out.println(ss);
}
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
//加载class
Class<?> c = Class.forName("ReflectTest");
//实例化
Object service = c.newInstance();
//获取方法, 需要执行参数,处理同方法名时的多态情况
Method method = c.getMethod("sayHello",String.class);
//调用方法
method.invoke(service,"zzzzzzz");
Method[] methods = c.getMethods();
for (Method method2 : methods) {
System.out.println(method2.getName());
System.out.println(method2.getGenericReturnType());
Type[] types = method2.getGenericParameterTypes();
for (Type type : types) {
//获取参数类型
System.out.println(type.getTypeName());
}
System.out.println("\n");
}
}
}
2. getMethod--获取方法列表
//方法, 几乎可以还原一个class的原貌,除了class引用的其它classes(需要记录下所有入参和返回值的类型,加以剔除)
Method[] methods = c1.getMethods();
System.out.println(method.getName());
System.out.println(method.getGenericParameterTypes().length);
System.out.println(method.getGenericReturnType());
3. newInstance -- 构造函数
a). 无入参的构造函数
Class c = Class.forName("DynTest");
obj = c.newInstance();
b). 带入参的构造函数 (先获得指定的constructor)
Class c = Class.forName("DynTest");
Class[] pTypes = new Class[] { double.class, int.class };
Constructor ctor = c.getConstructor(pTypes); //指定的构造函数
Object[] arg = new Object[] {3.14159, 125}; //自变量
Object obj = ctor.newInstance(arg);
c). 多参数的方法
Class ptypes[] = new Class[2];
ptypes[0] = Class.forName("java.lang.String");
ptypes[1] = Class.forName("java.util.Hashtable");
Method m = c.getMethod("func",ptypes);
4. invoke -- 调用方法
//先获取方法,组装入参,再实例,调用
Test obj = new Test();
Object args[] = new Object[2];
arg[0] = new String("Hello,world");
arg[1] = null;
Object r = m.invoke(obj, arg);
Object r = m.invoke(null, arg); //如果被调用方法是static,则第一个参数null
5. 运行时变更fields内容
//先获取field,再示例,再修改
public class Test {
public double d;
public static void main(String args[])
{
Class c = Class.forName("Test");
Field f = c.getField("d"); //指定field 名称
Test obj = new Test();
System.out.println("d= " + (Double)f.get(obj));
f.set(obj, 12.34);
System.out.println("d= " + obj.d);
}
}
Java反射详解(Spring配置)的更多相关文章
- java 反射详解
反射的概念和原理 类字节码文件是在硬盘上存储的,是一个个的.class文件.我们在new一个对象时,JVM会先把字节码文件的信息读出来放到内存中,第二次用时,就不用在加载了,而是直接使用之前缓存的这个 ...
- Java 反射详解 转载
java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...
- java反射 详解!!!!
java反射(特别通俗易懂) 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态 ...
- 【转载】Java 反射详解
目录 1.什么是反射? 2.反射能做什么? 3.反射的具体实现 4.根据反射获取父类属性 4.反射总结 反射反射,程序员的快乐! 1.什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够 ...
- java反射详解及说明
首先写一个Person类: package lltse.base.reflectdemo; public class Person { private String name ="张三&qu ...
- 《Java基础知识》Java 反射详解
定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射 ...
- Java反射详解(转)
原文地址:http://www.importnew.com/17616.html 动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所 ...
- Java反射详解:入门+使用+原理+应用场景
反射非常强大和有用,现在市面上绝大部分框架(spring.mybatis.rocketmq等等)中都有反射的影子,反射机制在框架设计中占有举足轻重的作用. 所以,在你Java进阶的道路上,你需要掌握好 ...
- java反射详解
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...
随机推荐
- 杂项-权限管理:Spring Secutity
ylbtech-杂项-权限管理:Spring Secutity Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在S ...
- RS485波特率问题
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51683648 最近再做一个项目,发现485不能发送数据,感到非常奇怪!后来查阅相关 ...
- <正则吃饺子> :关于Java的native方法(转)
感谢作者的分享,原文地址:http://blog.csdn.net/wike163/article/details/6635321 一. 什么是Native Method 简单地讲,一个Nativ ...
- WEB服务器(IIS)的配置与管理
安装Web服务器(IIS) 在"服务器管理器"-"角色"-"添加角色"-选择"Web服务器(IIS)"进行安装 这里,我 ...
- codeforces educational round25
A #include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ; string s; c ...
- eos命令
ps -ef|grep javakill -9 端口号cd /opt/sudytrue>nohup.outnohup eos7.5/startServer.sh &
- ZOJ 3946 Highway Project (最短路)
题意:单源最短路,给你一些路,给你这些路的长度,给你修这些路的话费,求最短路和最小花费. 析:本质就是一个最短路,不过要维护两个值罢了,在维护花费时要维护的是该路要花多少,而不是总的路线花费. 代码如 ...
- Multi-task Pose-Invariant Face Recognition 论文笔记
摘要: 在不受限制的环境中拍摄的人脸图像通常包含显著的姿态变化,这会显著降低设计用于识别正面的算法的性能.本文提出了一种新颖的面部识别框架,能够处理±90°偏航范围内的全方位姿势变化.所提出的框架首先 ...
- <base target="_self"/>标签的用法
语法 <base target="value"> 属性值 值 描述 _blank 在新窗口中打开被链接文档. _self 默认.在相同的框架中打开被链接文档. _par ...
- python文件名匹配
待匹配文件:#FY3D_IPMNT_GBAL_L1_20180516_0003_030KM_MS.HDF 干扰文件:#FY3D_IPMNT_GBAL_L1_20180516_0003_030KM_MS ...