栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

第五天 动态代理

Java 更新时间:发布时间: 百科书网 趣学号

今天的青岛依旧是阴雨蒙蒙,小雨淅淅中的学习之路显得有些泥泞,彼此同学间也敞开心扉,不再是刚刚到来时的拘谨。雨中,我们相互打量着。莫听穿林打叶声,何妨吟啸且徐行。

在这雨中,出发时刻便是显现了人生百态,

努力的本质,是打破固有的格局,迈出此间的泥淖,记住自己脆弱的时刻

一蓑烟雨任平生。料峭春风吹酒醒

在生活的轨迹上行走,总会遇到许多抉择,不排除风吹雨打和那些与之而来的坎坷与蹉跎,回首向来萧瑟处,这就是自己的生活和故事。

静态代理的缺点,如果当你要代理的方法越多时,你需要重复的逻辑就越多,假设你的目标类有100个方法,那么你的代理类就需要对这100个方法进行委托,但是又可能他们前后需要执行的逻辑时一样的,这样就会产生很多冗余。

  这样,就有个更好的动态代理的方法出现了。

  • 动态代理也分为两类:基于接口的代理和基于继承的代理
  • 两类实现的代表是:JDK代理 与 CGlib代理

JDK代理

//客户端Client
public class Client {
    
    public static void main(String[] args){
        Subject subject = (Subject) Proxy.newProxyInstance(Client.class.getClassLoader(),
                      new Class[]{Subject.class},new JdkProxySubject(new RealSubject()));
        subject.hello();
        subject.request();
    }
}
//subject接口,这个是jdk动态代理必须的前提。
public interface Subject {
    void request();
    void hello();
}
//目标对象RealSubject
public class RealSubject implements Subject{
    @Override
    public void request() {
        System.out.println("real subject execute request");
    }

    @Override
    public void hello() {
        System.out.println("hello");
    }
}
//代理类JdkProxySubject
public class JdkProxySubject implements InvocationHandler{

    private RealSubject realSubject;

    public JdkProxySubject(RealSubject realSubject) {
        this.realSubject = realSubject;
    }

    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("before");
        Object result = null;
        try{
            //利用反射动态的来反射方法,这就是动态代理和静态代理的区别
            result = method.invoke(realSubject,args);
        }catch (Exception e){
            System.out.println("ex:"+e.getMessage());
            throw e;
        }finally {
            System.out.println("after");
        }
        return result;
    }
}

转载代码原地址Spring IoC和AOP的实现原理解析(整理版) - 牧梦者 - 博客园 (cnblogs.com)

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/273181.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号