Java实现AOP动态代理的小案例

实现动态代理的步骤:

1. 创建接口,定义目标类要完成的功能

这里定义一个卖Usb的接口

//目标接口
public interface UsbSell {

    float sell(int amount);
}

2. 创建目标类实现接口

这里定义一个UsbKingFactory类来实现接口,金士顿厂家

//目标类
import com.bjpowernode.service.UsbSell;

public class UsbKingFactory implements UsbSell {
    @Override
    public float sell(int amount) {
        //目标方法
        System.out.println("目标类种,执行sell目标方法");
        return 85.0f;
    }
}

3.创建InvocationHandler接口的实现类,在invoke方法中完成代理类的功能


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

//必须实现InvocationHandler接口,来完成代理类要做的功能(1.调用目标方法,2.执行功能增强)
public class MySellHandler implements InvocationHandler {

    private Object target = null;

    //动态代理:目标对象是活动的,不是固定的,需要传入进来。
    //传入是谁,就给谁创建代理
    public MySellHandler(Object target){
        //给目标对象赋值
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object res = null;
        res = method.invoke(target,args);//执行目标方法
        if (res != null){
            Float price = (Float)res;
            price = price + 25;
            res = price;
        }

        return res;
    }
}

4.使用Proxy类的静态方法,创建代理对象。 并把返回值转为接口类型。`

import com.bjpowernode.factory.UsbKingFactory;
import com.bjpowernode.handler.MySellHandler;
import com.bjpowernode.service.UsbSell;

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

public class MainShop {
    public static void main(String[] args) {
        //创建代理对象,使用Proxy
        //1.创建目标对象
        UsbSell factory = new UsbKingFactory();
        //2.创建InvocationHandler对象
        InvocationHandler handler = new MySellHandler(factory);
        //3.创建代理对象
        UsbSell proxy = (UsbSell)Proxy.newProxyInstance(factory.getClass().getClassLoader(),
                factory.getClass().getInterfaces(),
                handler);
        //4.通过代理执行方法
        float price = proxy.sell(1);
        System.out.println("通过动态代理对象,调用方法:" + price);


    }
}

执行结果截图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值