代理全家福

静态代理

/**
 * 挣钱
 */
public interface MakeMoney {

    void makeMoney();
}
public class Boss implements MakeMoney {

    @Override
    public void makeMoney() {
        System.out.println("老板想挣钱");
    }
}
public class Employee implements MakeMoney {

    private MakeMoney boss;

    public Employee(MakeMoney boss) {
        this.boss = boss;
    }

    @Override
    public void makeMoney() {
        System.out.println("员工在干活");
        boss.makeMoney();
    }
}

Java动态代理

public class Employee implements InvocationHandler {

    private MakeMoney boss;

    public Employee(MakeMoney boss) {
        this.boss = boss;
    }

    public MakeMoney proxy() {
        return (MakeMoney) Proxy.newProxyInstance(boss.getClass().getClassLoader(), boss.getClass().getInterfaces(),
                this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("员工干活");
        return method.invoke(boss, args);
    }
}

 CGLib

public class MakeMoneyImpl implements MethodInterceptor {

    private MakeMoney target;

    public MakeMoney getInstance(MakeMoney target) {
        this.target = target;
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(target.getClass());
        enhancer.setCallback(this);

        return (MakeMoney) enhancer.create();
    }

    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        System.out.println("员工在干活");
        proxy.invokeSuper(obj, args);

        return null;
    }
}

 

posted @ 2021-07-01 23:40  yixiu868  阅读(32)  评论(0编辑  收藏  举报