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 MyProxy implements InvocationHandler {
private Object obj;
public Object bind(Object obj){
this.obj = obj;
return Proxy.newProxyInstance(this.obj.getClass().getClassLoader(),
this.obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object obj = null;
System.out.println("执行前业务......");
obj = method.invoke(this.obj, args);
System.out.println("执行后业务......");
return obj;
}
}
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();
}
}