public interface Service {
void say();
void run();
}
public class ServiceImpl implements Service{
@Override
public void say() {
System.out.println("我会说话了");
}
@Override
public void run() {
System.out.println("我会跑步了");
}
}
public class CgProxy implements MethodInterceptor {
// 维护目标对象
private Object target;
public CgProxy(Object target){
this.target = target;
}
public Object getProxyInstance(){
Enhancer en = new Enhancer();
en.setSuperclass(target.getClass());
en.setCallback(this);
return en.create();
}
@Override
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("开始.....");
Object returnValue = method.invoke(target, args);
System.out.println("结束.....");
return returnValue;
}
}
public class Test {
public static void main(String[] args){
//jdk
Service service = (Service)new MyProxy().bind(new ServiceImpl());
service.say();
//cglib
Service target = new ServiceImpl();
Service proxy = (Service) new CgProxy(target).getProxyInstance();
proxy.say();
}
}