Spring 高级 AOP 实现之 proxy增强-jdk

一、代码

复制代码
package com.mangoubiubiu.show.a12;

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

public class JdkProxyDemo {


    interface Foo{
        void  foo();
    }

    static class Target implements Foo{
        @Override
        public void foo() {
            System.out.println("target foo");
        }
    }


    /**
     * jdk 只能针对接口代理
     * @param param
     */
    public static  void  main(String [] param){

        Target target = new Target();

        //类加载器的作用,加载代理类内部生成的字节码
        ClassLoader loader = JdkProxyDemo.class.getClassLoader(); //获取当前类加载器
        //三个参数 1 代理对象自己  2 正在执行的方法对象 3 方法传过来的实际参数
        Foo proxy = (Foo)Proxy.newProxyInstance(loader, new Class[]{Foo.class}, (p, method, args) ->{
            System.out.println("before 增强");
            Object result = method.invoke(target,args);
            System.out.println("after 增强");

            return result;
        });
        //调用代理
        proxy.foo();
    }



}
复制代码

发现目标方法被增强了

收获💡

  • jdk 动态代理要求目标必须实现接口,生成的代理类实现相同接口,因此代理与目标之间是平级兄弟关系

本文作者:KwFruit

本文链接:https://www.cnblogs.com/mangoubiubiu/p/16725828.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   KwFruit  阅读(47)  评论(0编辑  收藏  举报
历史上的今天:
2020-09-24 统一结果返回
2020-09-24 Swagger -----自动生成接口文档
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起