Java中的Reflect
来源:互联网 发布:湖南衡阳网络工程学院 编辑:程序博客网 时间:2024/06/03 15:52
Java 中反射总的来说就是获得Class实例,通过这个Class实例来获取类的信息从而可以实例化该类或者调用方法
1. 获得Class实例
一共有三种方法获得
Class clazz = Class.forName("cn.sheep3.efjava.reflect.Persen");Class clazz = Demo.class;Class clazz = demo.getClass();
2. 通过Class实例获得类信息
//获得构造器clazz.getConstructors();//获得接口clazz.getInterfaces();//获得注解clazz.getAnnotations()//获得父类clazz.getSuperclass()//获得修饰符clazz.getModifiers()//获得方法clazz.getMethods()
3. getDeclaredXxx 与 getXxx
getDeclaredXxx 获得自身所有的Xxx
getXxx 获得所有Xxx包括父类
4. 实例化对象
//两种方式//java.lang.Class.newInstance()Object obj = Class.forName("java.lang.Object").newInstance();//java.lang.reflect.Constructor.newInstance()Constructor<?>[] cons = clazz.getConstructors();per1 = (Person) cons[0].newInstance();
5. 调用方法
//先获得Method实例Method declaredMethod = clazz.getDeclaredMethod("getAge");//调用Method实例的invoke方法,第一个参数是对象实例,后面的可变参数是方法参数Object m_return = declaredMethod.invoke(person);
6. 绕过访问控制
只需要在获取到Constructor、Field和Method类的对象之后,调用setAccessible方法并设为true即可
7. 动态代理
实现InvocationHandler接口
重写invoke(),在这里hook目标方法
获得proxy实例(List) Proxy.newProxyInstance(类加载器, Class[], InvocationHandler的实现)
通过这个proxy来调用方法
0 0
- java中的reflect机制
- Java中的reflect技术
- Java中的Reflect
- java中的reflect机制(转)
- Java中的反射机制(Reflect)
- java reflect
- java reflect
- java reflect
- Java Reflect
- java .reflect
- Java reflect
- java-reflect
- Reflect-Java
- JAVA Reflect
- Java Reflect
- JAVA reflect
- Java-Reflect
- 试用Java中的反射reflect之getDeclaredMethods和getMethods
- IoC与DI
- git push不需要输入密码
- Windows单机环境下配置MySQL多实例
- LeetCode 25. Reverse Nodes in k-Group
- win7+VS2010 64bit 编译QT
- Java中的Reflect
- [java游戏开发快速入门]俄罗斯方块游戏开发开篇
- 反编译工具Jadx
- E_K算法模版
- Python3学习五之数据结构
- CSAPP -- 信息的表示和处理
- 杭电5914
- 100道动态规划——1 UVA 1347 Tour 算法导论书后习题 双调巡游
- PAT 1062. Talent and Virtue