动态代理的简单实现

动态代理简单实例

动态代理可以对目标对象进行增强,但必须得实现一个接口

(1) 被代理的类

package entity;

public class Person implements Strong{

    @Override
    public void howToStrong() {
        System.out.println("如何才能变强");
    }
}

(2) 实现的接口

package entity;

public interface Strong {
    void howToStrong();
}

(3)动态代理实现


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

public class PersonProxy {

    public static Object toStrong(Object target){
        // 类加载器
        ClassLoader classLoader = target.getClass().getClassLoader();
        // 被代理对象实现的接口
        Class<?>[] interfaces = target.getClass().getInterfaces();
        // new InvocationHandler() 执行的方法
        Object o = Proxy.newProxyInstance(classLoader, interfaces, new InvocationHandler() {
            /**
             *
             * @param proxy 调用这个方法的代理实例
             * @param method 需要调用的方法
             * @param args 方法调用时所需要的参数
             * @return java.lang.Object
             * @author melo、lh
             * @createTime 2020-04-03 17:09:09
             */
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("996");
                Object invoke = method.invoke(target, args);
                System.out.println("变秃");
                return invoke;
            }
        });
        return o;
    }
}

lambda简化

  Object o = Proxy.newProxyInstance(classLoader, interfaces, (proxy, method, args) ->{
            System.out.println("996");
            Object invoke = method.invoke(target, args);
            System.out.println("变秃");
            return invoke;
        });

(4)测试类

package entity;

public class Test {
    public static void main(String[] args) {
        Strong strong   = (Strong) PersonProxy.toStrong(new Person());
        strong.howToStrong();
    }
}

结果展示在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值