import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ClassesAction {
public static void main(String[] args) {
//创建一个目标代理实例对象
ClassesService service = new ClassesServiceImpl();
//实例化一个代理工厂实例对象
JDKDyncProxyFactory factory = new JDKDyncProxyFactory();
//通过代理工厂对象中的createProxyInstance方法得到一个ClassesServiceImpl的代理对象
ClassesService cs = (ClassesService)factory.createProxyInstance(service);
//获取该代理对象的名称
System.out.println(cs.getClass().getName());
//获取该代理对象中的方法
cs.delete();//这句话做了什么事情?
}
}
interface ClassesService
{
void delete();
}
class ClassesServiceImpl implements ClassesService
{
public void delete()
{
System.out.println("真正的执行删除业务的操作");
}
}
class JDKDyncProxyFactory implements InvocationHandler
{
private Object target;
public Object createProxyInstance(Object target)//通过createProxyInstance方法new一个target的代理类
{
this.target = target;
//得到一个target代理对象
return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable
{
System.out.println("welcome");
Object result = method.invoke(target,args);
System.out.println("see you na na....");
return result;
}
}
请教各位高手,cs.delete();和InvocationHandler中的invoke方法是怎么联系起来的?InvocationHandler内部是怎么是实现的,知道的详细解答一下,不胜感激!
|