作用:
1.获取任意一个类中的所有信息
2.结合配置文件动态创建对象
使用:
1.获取class字节码文件对象。 Class.former("全类名") | 类名.class | 对象.getclass()
2.获取所有的成员变量。
get:获取 set:设置 Constructor:构造方法 Parameter:参数 Field:成员变量 Modifiers:修饰符 Method:方法 Declared:私有的
动态代理: 调用者 -> 代理 -> 对象
调用者:
//1. 获取代理的对象
BigStar bigStar = new BigStar("鸡哥");
Star proxy = ProxyUtil.createProxy(bigStar);
//2. 调用唱歌的方法
String result = proxy.sing("只因你太美");
System.out.println(result);
代理:
代理里面就是对象要被代理的方法,代理和对象实现同一个接口,接口中就是被代理的所有方法
Star star = (Star) Proxy.newProxyInstance(
ProxyUtil.class.getClassLoader(),//参数一:用于指定用哪个类加载器,去加载生成的代理类
new Class[]{Star.class},//参数二:指定接口,这些接口用于指定生成的代理长什么,也就是有哪些方法
//参数三:用来指定生成的代理对象要干什么事情
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
/*
* 参数一:代理的对象
* 参数二:要运行的方法 sing
* 参数三:调用sing方法时,传递的实参
* */
if("sing".equals(method.getName())){
System.out.println("准备话筒,收钱");
}else if("dance".equals(method.getName())){
System.out.println("准备场地,收钱");
}
//去找大明星开始唱歌或者跳舞
//代码的表现形式:调用大明星里面唱歌或者跳舞的方法
return method.invoke(bigStar,args);
}
}
);
对象:
接口public interface Star {}
对象继承接口public class BigStar implements Star {}