Java —反射机制+动态代理
反射机制简单的说就是JVM会将加载过得类记住,并可以根据类名获取到这个类里的所有信息
动态代理就是通过java的代理类,获取到传进java代理类的对象,从而得到被代理类的方法,然后改变这个方法
下面就上代码
- 准备一个接口,以及接口的实现类
public interface TestRefect {
void make1();
void make2();
}
public class TestRefectimpl implements TestRefect{
@Override
public void make1() {
System.out.println("执行make1方法");
}
@Override
public void make2() {
System.out.println("执行make2方法");
}
}
2.准备一个类并实现java的代理类的接口
public class ProxyMake implements InvocationHandler {
Object obj;//被代理的对象
public ProxyMake (Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//得到方法名 method
System.out.println(method.getName()+"方法开始执行");
//执行的是指定代理对象的指定方法
Object result = method.invoke(this.obj, args);
System.out.println(method.getName()+"方法执行完毕");
return result;
}
}
3.在main中查看方法的改写
public class Main {
public static void main(String[] args) {
TestRefect tr = new TestRefectimpl();
//创建代理对象并将 要代理的类传入方法
InvocationHandler handler = new ProxyMake(tr);
/**
* 参数1是代理对象的类加载器
* 参数2是被代理的对象的接口
* 参数3是代理对象
*/
TestRefect t = (TestRefect)Proxy.newProxyInstance(handler.getClass().getClassLoader(), tr.getClass().getInterfaces(), handler);
t.make1();
t.make2();
}
}