java反射系列八之AOP

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

 

posted @ 2019-02-01 10:45  静心*尽力  阅读(462)  评论(0编辑  收藏  举报