原作者:尚硅谷-宋红康
AOP
interface Human {
void info();
void fly();
}
class SuperMan implements Human {
@Override
public void info() {
System.out.println("SuperMan's Info()");
}
@Override
public void fly() {
System.out.println("SuperMan's fly()");
}
}
class HumanUtil {
public void method1() {
System.out.println("=======方法一=======");
}
public void method2() {
System.out.println("=======方法二=======");
}
}
class MyInvocationHandler1 implements InvocationHandler {
// 被代理对象
private Object obj;
private HumanUtil hu = new HumanUtil();
public void setObj(Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
hu.method1();
// 执行被代理对象的方法
Object executeResult = method.invoke(obj, args);
hu.method2();
return executeResult;
}
}
class MyProxy {
// 创建代理对象
public static Object getProxy(Object obj) {
MyInvocationHandler1 mih = new MyInvocationHandler1();
mih.setObj(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), mih);
}
}
public class AOPTest {
public static void main(String[] args) {
SuperMan sm = new SuperMan();
Human human = (Human) MyProxy.getProxy(sm);
human.fly();
System.out.println();
human.info();
System.out.println();
NikeClothFactory ncf = new NikeClothFactory();
ClothFactory cf = (ClothFactory) MyProxy.getProxy(ncf);
cf.productCloth();
}
}