java动态代理实现方式:
1. 创建接口
package com.test.proxyTest;
/**
* 对象接口
*/
public interface Subject {
public String say(String name, int age); //定义抽象方法 say
public String listenMe(String name, int age);
}
2.创建实现类
package com.test.proxyTest;
public class RealSubject implements Subject {
public RealSubject() {
// TODO Auto-generated constructor stub
}
public String listenMe(String name, int age) {
// TODO Auto-generated method stub
return "姓名: "+name+" 年龄:"+age ;
}
public String say(String name, int age) {
// TODO Auto-generated method stub
return "say:"+name+"---"+age;
}
}
3.创建动态代理类(动态代理的关键,重点)
package com.test.proxyTest;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler {
/**
* 动态代理类
*/
private Object obj;
//绑定真实操作主题
public Object bind(Object obj){
this.obj = obj;
//动态生成实现类
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this);
}
//动态调用方法
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
Object temp = method.invoke(this.obj, args);
return temp;
}
}
4.动态代理实现
package com.test.proxyTest;
public class DailiProxy {
/**
* 测试类
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyInvocationHandler handler = new MyInvocationHandler(); //实例化代理操作类
Subject sub = (Subject)handler.bind(new RealSubject()); //绑定对象
String info = sub.say("张三", 31);
System.out.println(info);
}
}