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

Java实现AOP动态代理的小案例,第1张

Java实现AOP动态代理的小案例 实现动态代理的步骤: 1. 创建接口,定义目标类要完成的功能

这里定义一个卖Usb的接口

//目标接口
public interface UsbSell {

    float sell(int amount);
}

2. 创建目标类实现接口

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

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);


    }
}

执行结果截图:

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5708537.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-18
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存