静态代理
基于接口实现动态代理
ITeacherDao
public interface ITeacherDao {
public void teach();
}
TeacherDao 目标对象
import com.cao.demo05.ITeacherDao;
public class TeacherDao implements ITeacherDao {
@Override
public void teach() {
System.out.println("老师在上课");
}
}
ProxyFactory
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyFactory {
private Object target;
public ProxyFactory(Object target) {
this.target = target;
}
public Object getProxyInstance(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
log(method.getName());
Object invoke = method.invoke(target, args);
return invoke;
}
}
);
}
public void log(String methodName){
System.out.println("执行了"+methodName+"方法");
}
}
Client
public class Client {
public static void main(String[] args) {
ITeacherDao teacherDao = new TeacherDao();
ITeacherDao proxyInstance = (ITeacherDao) new ProxyFactory(teacherDao).getProxyInstance();
proxyInstance.teach();
}
}