自定义类实现 InvocationHandler 接口 重写里面的方法 实现代理模式
1.自定义类
package com.yyf.demo03;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyInvocationHandler implements InvocationHandler {
//要代理的接口
private Object target;
public void setTarget(Object target) {
this.target = target;
}
//生成得到代理的类
public Object getProxy(){
return Proxy.newProxyInstance (this.getClass ().getClassLoader (),
target.getClass ().getInterfaces (),this);
}
//处理代理实例,并返回结果
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
log (method.getName ());
Object result = method.invoke (target, args);
return result;
}
public void log(String msg){
System.out.println ("[Debug]使用了"+msg+"方法");
}
}
2.主类
package com.yyf.demo03;
import com.yyf.demo02.ServiceImplProxy;
import com.yyf.demo03.ServiceImpl;
public class Client {
public static void main(String[] args) {
//真实角色
ServiceImpl serviceImpl = new ServiceImpl ();
//代理角色。不存在的
ProxyInvocationHandler pih = new ProxyInvocationHandler ();
pih.setTarget (serviceImpl);
//动态生成并得到一个代理类
Service proxy = (Service) pih.getProxy ();
proxy.add ();
}
}
3.接口
package com.yyf.demo03;
public interface Service {
public void add();
public void delete();
public void update();
public void query();
}
4.接口实现类
package com.yyf.demo03;
import com.yyf.demo03.Service;
public class ServiceImpl implements Service {
@Override
public void add() {
System.out.println ("增加了一个用户");
}
@Override
public void delete() {
System.out.println ("删除了一个用户");
}
@Override
public void update() {
System.out.println ("修改了一个用户");
}
@Override
public void query() {
System.out.println ("查询了一个用户");
}
}