• java动态代理


    java动态代理

    java代理是一种设计模式,即通过代理对象访问目标对象,可以在目标对象的基础上增加额外的功能
    java代理分为静态代理和动态代理

    静态代理:

    静态代理在使用时需要定义接口或者父类,被代理对象与代理对象实现相同的接口或者继承相同的父类

    聚合的方式实现静态代理

    聚合:一个类中调用另一个类的对象
    创建一个车站的类,写入方法
    声明一个接口
    创建一个代理类,可以在代理类中增加或删除功能

    编写测试类查看结果

    继承的方式实现静态代理

    新建一个consignment2类,继承station类,直接使用父类的方法
    然后在修改一下测试类
    注解:
    继承:java中通过extends来创建一个类的子类,一个子类只能继承一个父类
    接口:java中通过implements声明自己使用的接口,implements可以实现多个接口

    动态代理

    在程序运行中动态产生代理,以实现对不同类,不同方法的代理

    JDK动态代理

    创建一个实现接口InvocationHandler的类,必须实现invoke方法
    创建被代理的类以及接口
    调用Proxy的静态方法,创建一个代理类,通过代理调用方法
    InvocationHandler h = new dynamic(station2);    创建实例,调用处理程序
    Class<?>cls = station2.getClass();    这个是代理类实现的接口列表
    Proxy.newProxyInstance    实现代理类的classloader
    JDK动态代理只能代理实现了接口的类,没有实现接口的类不能实现JDK动态代理

    CGLIB动态代理

    针对类来实现代理,对目标类产生一个子类,通过方法拦截所有父类方法的调用,大概流程如下

    使用IDEA添加cglib的依赖,点击文件然后项目结构
    选择Modules,然后点击加号,导入下载好的cglib.jar包。
    然后新建一个真实类,我们还用之前创建的station类即可
    然后写一个方法拦截器intercept类,调用MethodInterceptor接口方法拦截
    写一个测试类
    运行一下发现报错了
    网上查了一下是因为项目不是maven管理的,无法解决依赖传递问题,需要自己手动引入asm.jar文件,然后在运行一下就可以了












  • 相关阅读:
    React爬坑秘籍(一)——提升渲染性能
    (转)Chrome开发者工具不完全指南(一、基础功能篇)
    React-Todos
    webpack前端模块加载工具
    Python面试笔记二
    Python面试笔记一
    Python面试笔记四
    Python面试笔记三
    Mysql性能优化一
    公共的JS组件-告别CURD
  • 原文地址:https://www.cnblogs.com/Excellent-person/p/14305064.html
Copyright © 2020-2023  润新知