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 动态代理要求目标必须实现接口,生成的代理类实现相同接口,因此代理与目标之间是平级兄弟关系
posted @ 2022-09-24 16:05  KwFruit  阅读(44)  评论(0编辑  收藏  举报