package AOP;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface Human{
void info();
void fly();
}
class SuperMan implements Human{
@Override
public void info() {
System.out.println("我是超人");
}
public void fly() {
System.out.println("I believe that I can fly!");
}
}
class HumanUtil{
public void method1() {
System.out.println("=====方法一======");
}
public void method2() {
System.out.println("=====方法二======");
}
}
class MyInvocationHandler implements InvocationHandler{
//被代理对象的声明
Object obj;
public void setObject(Object obj) {
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
HumanUtil h = new HumanUtil();
h.method1();
Object returnValue = method.invoke(obj, args);
h.method2();
return returnValue;
}
}
//动态的创建一个代理类的对象
class MyProxy{
public static Object getProxyInstance(Object obj) {
MyInvocationHandler hander = new MyInvocationHandler();
hander.setObject(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), hander);
}
}
public class TestAop {
public static void main(String[] args) {
//创建一个被代理类的对象
SuperMan man = new SuperMan();
//返回一个代理类的对象
Object obj = MyProxy.getProxyInstance(man);
Human hu = (Human)obj;
hu.info();
System.out.println();
hu.fly();
}
}
