JavaSE 反射 Part8

来源:互联网 发布:java程序员等级划分 编辑:程序博客网 时间:2024/05/17 22:14

原作者:尚硅谷-宋红康


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();    }}