Spring 高级 jdk代理原理-基础篇

一、简单代理

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

public class A13 {


    interface Foo{
        void foo();
    }




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


    public static void main(String [] param){

        Foo proxy = new $Proxy0();


    }

}
复制代码
复制代码
package com.mangoubiubiu.show.a13;
import com.mangoubiubiu.show.a13.A13.Foo;
import com.mangoubiubiu.show.a13.A13.Target;


public class $Proxy0 implements Foo {
    @Override
    public void foo() {
        System.out.println("功能增强");

        new Target().foo();

    }
}
复制代码

打印测试

二、初步进阶

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

public class A13 {


    interface Foo{
        void foo();
    }


    interface InvocationHandler{
        void invoke();
    }



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


    public static void main(String [] param){

        Foo proxy = new $Proxy0(() -> {
            System.out.println("调用目标方法");
            new Target().foo();
        });
        proxy.foo();
    }
}
复制代码
复制代码
package com.mangoubiubiu.show.a13;
import com.mangoubiubiu.show.a13.A13.Foo;
import com.mangoubiubiu.show.a13.A13.Target;
import com.mangoubiubiu.show.a13.A13.InvocationHandler;

public class $Proxy0 implements Foo {

    private InvocationHandler h;

    public $Proxy0(InvocationHandler h){
        this.h=h;
    }

    @Override
    public void foo() {
       h.invoke();
    }
}
复制代码

打印测试

三、再次进阶

 

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

import java.lang.reflect.Method;

public class A13 {


    interface Foo{
        void foo() throws Throwable;
        void bar() throws Throwable;
    }


    interface InvocationHandler{
        void invoke(Method method,Object[] args ) throws  Throwable;
    }



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

        @Override
        public void bar() {
            System.out.println("target bar");
        }
    }


    public static void main(String [] param) throws Throwable {

        Foo proxy = new $Proxy0((Method method,Object[] args ) -> {
            System.out.println("before");
            method.invoke(new Target(),args);
        });

        proxy.foo();
        proxy.bar();
    }

}
复制代码
复制代码
package com.mangoubiubiu.show.a13;
import com.mangoubiubiu.show.a13.A13.Foo;
import com.mangoubiubiu.show.a13.A13.Target;
import com.mangoubiubiu.show.a13.A13.InvocationHandler;

import java.lang.reflect.Method;

public class $Proxy0 implements Foo {

    private InvocationHandler h;

    public $Proxy0(InvocationHandler h){
        this.h=h;
    }


    @Override
    public void foo() throws Throwable {
        Method foo = Foo.class.getMethod("foo");
         h.invoke(foo,new Object[0]);
    }

    @Override
    public void bar() throws Throwable {
        Method bar = Foo.class.getMethod("bar");
        h.invoke(bar,new Object[0]);
    }
}
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

本文作者:KwFruit

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

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

posted @   KwFruit  阅读(31)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起