AOP的两种模式代码测试

public interface Service {

    void say();

    void run();
}

public class ServiceImpl implements Service{

    @Override
    public void say() {
        System.out.println("我会说话了");
    }

    @Override
    public void run() {
        System.out.println("我会跑步了");
    }
}

public class MyProxy implements InvocationHandler {
    private Object obj;

    public Object bind(Object obj){
        this.obj = obj;
        return Proxy.newProxyInstance(this.obj.getClass().getClassLoader(),
                this.obj.getClass().getInterfaces(), this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object obj = null;
        System.out.println("执行前业务......");
        obj = method.invoke(this.obj, args);
        System.out.println("执行后业务......");
        return obj;
    }
}

public class CgProxy implements MethodInterceptor {
    // 维护目标对象
    private Object target;

    public CgProxy(Object target){
        this.target = target;
    }
    
    public Object getProxyInstance(){
        Enhancer en = new Enhancer();
        en.setSuperclass(target.getClass());
        en.setCallback(this);
        return en.create();
    }
    
    @Override
    public Object intercept(Object obj, Method method, Object[] args,
                            MethodProxy proxy) throws Throwable {
        System.out.println("开始.....");
        Object returnValue = method.invoke(target, args);
        System.out.println("结束.....");
        return returnValue;
    }
}

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

        //jdk
        Service service = (Service)new MyProxy().bind(new ServiceImpl());
        service.say();

        //cglib
        Service target = new ServiceImpl();
        Service proxy = (Service) new CgProxy(target).getProxyInstance();
        proxy.say();
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值