反射就是:以编程的方式获取类中的各种成分(成员变量、方法、构造器等)。
使用反射创建对象(更加灵活)。
无视访问修饰符操作对象的成员变量、方法、构造器等(更强大)。
获取Class类对象
方式一:Class c1 = Class.forName("全类名");
方式二:Class c2 = 类名.class;
方式三:Class c3 = 对象.getClass();
Class类中用于获取构造方法的方法
Constructor>[] getConstructors():返回所有公共构造方法对象的数组
Constructor>[] getDeclaredConstructors():返回所有构造方法对象的数组
Constructor
Constructor
Constructor类中用于创建对象的方法
T newlnstance(Object... initargs):根据指定的构造方法创建对象
setAccessible(boolean flag):设置为true,表示取消访问检查 // 暴力获取
Class类中用于获取成员变量的方法
Field[] getFields():返回所有公共成员变量对象的数组
Field[] getDeclaredFields():返回所有成员变量对象的数组
Field getField(String name):返回单个公共成员变量对象
Field getDeclaredField(String name):返回单个成员变量对象
Field类中用于创建对象的方法
void set(Object obj,Object value):赋值
Object get(Object obj)获取值
setAccessible(true) // 暴力获取
Class类中用于获取成员方法的方法
Method[] getMethods():返回所有公共成员方法对象的数组,包括继承的
Method[] getDeclaredMethods():返回所有成员方法对象的数组,不包括继承的
Method getMethod(Sstring name,Class>... parameterTypes):返回单个公共成员方法对象
Method getDeclaredMethod(String name,Class>... parameterTypes):返回单个成员方法对象
Method类中用于创建对象的方法
Object invoke(Object obj,Object... args):运行方法
参数一:
参数二:调用方法的传递的参数(如果没有就不写)
返回值:方法的返回值(如果没有就不写)
用AOP实现自动添加创建时间,修改时间的操作
代理可以无侵入式的给对象增强其他的功能。
代理里面就是对象要被代理的方法。
通过接口保证,后面的对象和代理需要实现同一个接口。
接口就是被代理的所有方法。