美文网首页
java代理机制

java代理机制

作者: baifanger | 来源:发表于2020-09-18 16:27 被阅读0次

一、代理模式介绍

代理是一种设计模式,主要用于在我们访问目标对象时,在不修改目标对象的前提下,可以对目标对象提供的功能进行一定的扩展。
代理可分为静态代理、动态代理以及三方库 cblib代理

二、静态代理

这种代理需要额外写一个代理类,和目标对象实现一样的接口。
优点:实现方式简单,易理解
缺点:
1.代码冗余,需要额外生成代理类
2.不易维护,一旦接口有变化,代理类和目标对象都需要改动
举例:
接口类:I

public interface ITest {
    public void test();
}

实现类

public class TestImpl1 implements ITest {
    @Override
    public void test() {
        Log.i("test","test1");
    }
}

public class TestImpl2 implements ITest {
    @Override
    public void test() {
        Log.i("test","test2");
    }
}

代理类

public class TestProxy implements ITest {
    private ITest target;

    public TestProxy(ITest test) {
        target = test;
    }

    @Override
    public void test() {
        Log.i("test", "before");
        target.test();
        Log.i("test", "after");
    }
}

在使用时,我们不再直接使用 TestImpl1TestImpl2,而使用TestProxy对象,并将目标对象传入TestProxy中,在调用目标对象前后,增加一些相应的处理,以达到代理的目的。

三、动态代理

从上述代码中,我们能明显看到静态代理在开发及维护上的弊端,因此有了动态代理。
静态代理是编译时根据我们写的代码生成.class文件来实现的,而动态代理则不一样,它是在程序运行时动态生成相应的.class文件
动态代理类

public class TestProxyFactory {
    private ITest target;

    public TestProxyFactory(ITest test) {
        target = test;
    }

    public Object getProxyInstance() {
        //返回目标类的代理类
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                Log.i("test", "before");
                method.invoke(target, args);
                Log.i("test", "after");
                return null;
            }
        });
    }
}

从上述动态代理代码可以看出,不再需要我们额外的写代理类了,随后目标类有任何的功能增减,都不会影响其他代码

四、cglib

这是三方提供的一个类库,具体我也没用过,这里只是给大家普及一下知识点,从上面动态代理可以看出,其需要依赖于一个接口,而cblib最大的优点是不再依赖于接口.具体的用法大家就自己研究了。

关于动态代理生成的$proxy0类的代码,参照以下:https://blog.csdn.net/zhao_zepeng/article/details/55050627

相关文章

  • java反射和动态代理

    java动态代理Proxy.newProxyInstance 详解java代理机制(静态代理、动态代理)以及使用场景

  • Java 动态代理

    java的动态代理机制详解 JDK动态代理详解 Java核心技术点之动态代理

  • Java动态代理

    Spring的核心AOP的原理就是java的动态代理机制。所以,我们需要好好将java动态代理机制进行梳理。 ...

  • Java反射机制详解(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • Java反射机制总结(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • Java代理机制

    #静态代理 静态代理是在编译时就将接口、实现类、代理类一股脑儿全部手动完成,但如果我们需要很多的代理,每一个都...

  • JAVA代理机制

    Java代理相关主要知识如下: (1)利用代理可以在运行时创建一个实现了一组给定接口的新类。 这种功能只有在编译时...

  • java代理机制

    一、代理模式介绍 代理是一种设计模式,主要用于在我们访问目标对象时,在不修改目标对象的前提下,可以对目标对象提供的...

  • Java代理机制

    代理模式 可以分为两种,一种是静态代理,一种是动态代理。两种代理从虚拟机加载类的角度来讲,本质上都是一样的,都是在...

  • Java动态代理

    Java动态代理 引言 最近在看AOP代码,其中利用到了Java动态代理机制来实现AOP织入。所以好好地把Java...

网友评论

      本文标题:java代理机制

      本文链接:https://www.haomeiwen.com/subject/oijbektx.html