【JAVA】反射总结

反射是什么?

反射就是指程序在运行的时候能够知道一个类的自身信息。编程

自身信息有哪些:类方法、属性、成员变量、构造方法、包等框架

动态编译和静态编译 

静态编译:在编译的时候进肯定类型,若是绑定对象成功,new 是静态加载类,就编译经过。函数

ClassA classA = new ClassA();

动态编译:在运行的时候肯定类型,绑定对象。最大发挥了Java的多态,下降类之间的耦合性。spa

Class c = Class.forName("ClassA");
ClassA classA = (ClassA) c.newInstance();

相关方法

public Method getDeclaredMethod(String name, Class<?>... parameterTypes) // 获得该类全部的方法,不包括父类的
public Method getMethod(String name, Class<?>... parameterTypes) // 获得该类全部的public方法,包括父类的
//具体使用
Method[] methods = class1.getDeclaredMethods();//获取class对象的全部声明方法
Method[] allMethods = class1.getMethods();//获取class对象的全部public方法 包括父类的方法
Method method = class1.getMethod("info", String.class);//返回次Class对象对应类的、带指定形参列表的public方法
Method declaredMethod = class1.getDeclaredMethod("info", String.class);//返回次Class对象对应类的、带指定形参列表的方法
public Field getDeclaredField(String name) // 得到该类自身声明的全部变量,不包括其父类的变量
public Field getField(String name) // 得到该类自全部的public成员变量,包括其父类变量

//具体实现
Field[] allFields = class1.getDeclaredFields();//获取class对象的全部属性
Field[] publicFields = class1.getFields();//获取class对象的public属性
Field ageField = class1.getDeclaredField("age");//获取class指定属性
Field desField = class1.getField("des");//获取class指定的public属性

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) // 得到该类全部的构造器,不包括其父类的构造器
public Constructor<T> getConstructor(Class<?>... parameterTypes) // 得到该类因此public构造器,包括父类

//具体
Constructor<?>[] allConstructors = class1.getDeclaredConstructors();//获取class对象的全部声明构造函数
Constructor<?>[] publicConstructors = class1.getConstructors();//获取class对象public构造函数
Constructor<?> constructor = class1.getDeclaredConstructor(String.class);//获取指定声明构造函数
Constructor publicConstructor = class1.getConstructor(String.class);//获取指定声明的public构造函数

理解了反射以后,AOP(面向切面编程)就很简单代理

反射用的地方不少,如今全部的框架里面几乎处处是反射code

动态代理分几种方式:

1. 静态代理,直接写一个新类对实现类进行包装;对象

2. 动态代理,经过反射取得类实现,并调用方法,实现类必须实现其接口;blog

3. CGLib代理,不须要实现接口,能够对任意类进行实现;接口

参考:get

https://mp.weixin.qq.com/s?__biz=MjM5NzMyMjAwMA==&mid=2651478782&idx=1&sn=f468a2d9129d313f5ed15e30604f7199&chksm=bd2536818a52bf9710623f843c75cb751ba7d5fd3a56a3aa3ceffebccfdbc02e29e8ed9d7130&scene=21#wechat_redirect

相关文章
相关标签/搜索