首页 > 代码库 > 动态代理
动态代理
软件152 刘昊翰
动态代理
1.概念
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类:
(1)Interface InvocationHandler:该接口中仅定义了一个方法Object:invoke(Object obj,Method method,Object[] args)。在实际使用时,第一个参数obj一般是指代理类,method是被代理的方法,args为该方法的参数数组。这个抽象方法在代理类中动态实现。WIN
(2)Proxy:该类即为动态代理类,作用类似于上例中的ProxySubject
2.DynamicProxy.java核心代码:
package org.proxy.proxyClass;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//动态代理类
public class DynamicProxy 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[] objs)
throws Throwable {
Object result=null;
try{
before();
result=method.invoke(obj, objs);
after();
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public void before(){
System.out.println("订机票,订酒店,送老板");
}
public void after(){
System.out.println("订机票,退酒店,接老板");
}
}
3.运行结果如图
动态代理