package proxy;
public interface Person {
void find();
String res();
}
package proxy;
public class Zhang implements Person {
private String sex = "男";
@Override
public void find() {
}
public String res(){
return "abc";
}
}
package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Jin implements InvocationHandler {
private Person target;
public Jin() {
}
public Object instence(Person target) {
this.target = target;
Class<? extends Person> clazz = target.getClass();
return Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{Person.class}, this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Jin.invoke");
Object res = null;
try {
System.out.println("开启");
res = method.invoke(target, args);
// int i = 1/0;
System.out.println("提交");
} catch (Exception e) {
System.out.println("回滚");
e.printStackTrace();
}
return res;
}
public static void main(String[] args) {
Zhang target = new Zhang();
Person res = (Person) new Jin().instence(target);
System.out.println("res = " + res.res());
}
}
注意三点:接口。invoke中的proxy 以及创建代理对象时候的接口。