IDEA简单操作概述Spring 静态代理和动态代理

本文介绍了Java中的静态代理和动态代理。动态代理允许在不修改原有类的情况下,为实现某个接口的类添加额外处理,如日志和事务。文章详细讲解了如何使用JDK的Proxy和CGLIB库来实现动态代理,包括代理类的生成和使用过程。
摘要由CSDN通过智能技术生成


静态代理和动态代理

动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等。可以给这个类创建一个代理,故名思议就是创建一个新的类,这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。这个代理类并不是定义好的,是动态生成的。具有解耦意义,灵活,扩展性强。

动态代理实现:首先必须定义一个接口,还要有一个InvocationHandler(将实现接口的类的对象传递给它)处理类。再有一个工具类Proxy(习惯性将其称为代理类,因为调用他的newInstance()可以产生代理对象,其实他只是一个产生代理对象的工具类)。利用到InvocationHandler,拼接代理类源码,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。

静态代理:
优点:
  1、 实现松散耦合。
  2、做到在不修改目标对象的功能前提下,对目标功能扩展。

缺点:
如果项目中有多个类,则需要编写多个代理类,工作量大,不好修改,不好维护,不能应对变化。


一、静态代理

创建接口

public interface Examable {
   
    void exam();
}

创建学生类实现接口

public class Student implements Examable {
   
  
    @Override
    public void exam() {
   
        System.out.println("超级无敌棒棒糖!");
    }

}

创建代理对象

public class Cheater implements Examable {
   

  //被代理对象
    private final Examable student;

    public Cheater(Examable student){
   
        this.student=student;
    }

    @Override
    public void exam() {
   
        System.out.println("现场漂移");
        student.exam()//调用Student类的方法
    }
}

测试

public class MainTest {
   
    //组合优于继承
    public static void main(String[] args) 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值