孙少平

V1

2022/07/25阅读:7主题:默认主题

Aop

底层也是反射 在invoke周围添加方法

package com.god.se.reflection.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicProxyTest {
    public static void main(String[] args) {

        HuMan superMan = new SuperMan();
        HuMan proxy = (HuMan) ProxyFactory.getProxy(superMan);
        proxy.eat();
        proxy.getBelief();

        Tylor tylor = new Tylor();
        Star proxy1 = (Star) ProxyFactory.getProxy(tylor);
        proxy1.sing();


    }
}

interface HuMan{
    void eat();
    void getBelief();
}

class HumanUtil{
    public void method1(){
        System.out.println("method1调用");
    }
    public void method2(){
        System.out.println("method2调用");
    }
}

class SuperMan implements  HuMan{
    @Override
    public void eat() {
        System.out.println("superman is eat");
    }

    @Override
    public void getBelief() {
        System.out.println("superman's belief is fly ");
    }
}



 class ProxyFactory{


    public static Object getProxy(Object object) {
        MyInvocationHandler handler = new MyInvocationHandler();
        handler.bind(object);
        Object proxyInstance = Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), handler);
        return proxyInstance;
    }
}

class MyInvocationHandler implements InvocationHandler {

    private Object object;
    public void bind(Object obj){
        this.object=obj;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        HumanUtil util = new HumanUtil();
        util.method1();
        Object returnVal = method.invoke(object, args);
        util.method2();
        return returnVal;
    }
}


分类:

后端

标签:

后端

作者介绍

孙少平
V1