切面编程--使用JDK动态代理

本文介绍了如何使用JDK动态代理来实现切面编程。通过创建一个简单的计算器接口及其实现类,再利用动态代理生成代理对象,可以在不修改原始类的基础上添加额外的功能。

切面编程--使用JDK动态代理

1.使用JDK动态代理

对于直接使用JDK的动态代理的类的缺点:
1.对于实现代理的类,必须要实现接口,否则没有办法实现代理
2.写起来太难
接口:

package com.proxy.jdk;

public interface Calculater {
    public double add(double x, double y);

    public double cut(double x, double y);
}

接口的实现类:

package com.proxy.jdk;

public class MyCalculater implements Calculater {
    @Override
    public double add(double x, double y) {
        return x + y;
    }

    @Override
    public double cut(double x, double y) {
        return x - y;
    }
}

实现类的代理类:

package com.proxy.jdk;

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

public class MycalProxy {

    public static Calculater getMyCalProxy(final Calculater calculater) {
        ClassLoader loader = calculater.getClass().getClassLoader();
        Class<?>[] interfaces = calculater.getClass().getInterfaces();
        InvocationHandler h = new InvocationHandler() {
            /**
             *
             * @param proxy 代理对象,任何时候都不要动这个对象
             * @param method 当前要执行的目标对象的方法
             * @param args 要传入的参数
             */
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //利用反射执行目标方法
                //目标方法执行后的返回值
                System.out.println("方法执行之前我执行的操作。。。");
                Object result=method.invoke(calculater,args);
                System.out.println("方法执行之后我执行的操作。。。"+result);
                return result;
            }
        };
        Object object = Proxy.newProxyInstance(loader, interfaces, h);
        return (Calculater) object;
    }
}


测试类:

package com.proxy.jdk;

public class Test {
    public static void main(String[] args) {
        Calculater calculater = new MyCalculater();

        Calculater mycalProxy = MycalProxy.getMyCalProxy(calculater);

        System.out.println(mycalProxy.add(1, 8));
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值