一.反射的包:
java.lang.reflect:
所有的反射api都在该包下,使用的时候需要导入包
java.lang : 包下面的工具类使用时不需要导入包
class类:
同步,互斥锁
object.class
java.lang.Class: java反射机制的核心类
Constructor: 主要用于描述构造方法的类
构造方法的结构:
public: 方法修饰符 getModifiers();
方法名:getName();
参数:统计参数个数:getParamenterCount();
获取参数类型: getParamenterTypes();
FIeld 类:主要用于描述字段(成员变量的信息)
Method类:主要用于描述方法的类
访问修饰符
返回值类型
参数类型
参数个数
方法名
方法的调用
class类的实例化方法:
class forName("java.lang.String");
Class getClass();//通过Object的getClass 方法返回class类对象
int.class;class字段的方式获取class对象
Object newInstance();用于对象的实例化
通过反射进行对象的实例化:
正常情况下的实例化对象的方法:
object obj = new object();
object obj2 = new object("dsf");
反射的方法实例化对象;
1.获取反射类对象:
class clazz = class.forName("comqiku.Test");
2.newInstance()方法:进行实例化
Test test = clazz.newInstance();
3.带参的话:
Construcor getConstructor(int.String.class);
Constructor类:主要用于描述构造方法:
Constructor class.getConstructor();进行实例化
常用方法:
newInstance():实例化方法
newInstance(int.class,String.class);实例化方法
field字段类:
getDecaredFields(); 获取所有的字段(包括private,public,protected,默认)
getFields();获取public类型字段
getDecaredFiled("id");获取名称为id的字段
getName();获取字段名
getModifiers();获取权限修饰符
getType();获取字段的类型
get(Object obj); 获取字段值
set(obj,value);给字段设置值
setAccessible(true);设置为允许为私有字段赋值
Method方法类:
getName(); 获取方法名
invoke(object obj ,object...args);通过反射机制调用方法
二.设计模式之代理模式
Person
eat(){
//人要吃饭
}
ProxyPerxon
person person
eat(){
//洗手
person.eat();
//刷完
}
代理模式:
1.静态代理模式
1>目标对象
2>代理对象
3>在代理类中添加目标对象的引用
a.定义一个共通接口
b.目标对象和代理对象要实现同一个接口
c.在代理对象类中定义接口的实例;
2.动态代理模式
3.CGLIB动态代理模式
1.导入功能包
2.实现原理是通过在内存中构建被代理对象的子类进行扩展功能
3.使用拦截机制,去加载扩展功能的方法