java代理模式的分类

  • 时间:
  • 5390人关注

java代理模式的分类:1、静态代理,由程序员创建或者由第三方工具生成,再进行编译;在程序运行之前,代理类的.class文件已经存在了;2、动态代理,程序运行前是不存在的,也就是说代理类在程序运行时才创建的代理模式成为动态代理。,另外这篇文章主要知识点是关于Python、python教程的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

教程详情电子资料
  • 教程类别:python教程
  • 编辑整理:秦琇云
  • 教程字数:1635字节
  • 阅读时间:大概15分钟
  • 下载本教程(DOC版)
  • 基于ArcGIS的Python编程秘笈(第2版)
  • python机器学习:Scikit-learn使用手册
  • Python Web开发实战
  • 疯狂Python讲义
  • Python强化学习实战(含源码)
  • 给大家整理一篇不错的python文章,感觉写的不错,增加了更多实例内容,觉得好就请收藏下。

    java代理模式的分类

    说到代理,大家肯定都有接触过。毕竟当有些事务不想亲自处理时,会选择委托给别人进行解决。那么在java中也有着这样的机制,叫做代理模式。主要分为两大类:静态代理和动态代理。一种是运行前就存在,另一种是运行后才进行创建。下面我们就java中的两种代理模式进行讲解。

    1.静态代理

    由程序员创建或者由第三方工具生成,再进行编译;在程序运行之前,代理类的.class文件已经存在了。静态代理通常只代理一个类,并且要事先知道代理的是什么。

    public class BlogStaticProxy implements IBlogService{
     
        private IBlogService blogService;
     
     
     
        public BlogStaticProxy(IBlogService blogService) {
     
            this.blogService = blogService;
     
        }
     
     
     
        @Override
     
        public void writeBlog() {
     
            System.out.println("start writing...");
     
            blogService.writeBlog();
     
            System.out.println("end writing...");
     
        }
     
    }

    2.动态代理

    动态代理的代理类在程序运行前是不存在的,也就是说代理类在程序运行时才创建的代理模式成为动态代理。这种情况下,代理类并不是在Java代码中定义好的,而是在程序运行时根据我们的在Java代码中的“指示”动态生成的。

    public class MainClass {
        public static void main(String[] args) {
            //1、创建一个真实角色
            Singer target = new Singer();
            //2、调用Proxy.newProxyInstance方法,并构造一个InvocationHandler对象,
            //3、在对象内部重写invoke方法,同时调用method.invoke(target,args);
            //4、并在该方法的上下添加自己的代码逻辑
            //其中:target.getClass().getClassLoader():获取类加载器,用来生成代理对象;
            //   target.getClass().getInterfaces()获取接口元信息;
            ISinger iSinger = (ISinger) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
                @Override
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“前”编写自己的业务逻辑
                    Object returnValue = method.invoke(target,args);//此处通过反射调用真实对象对应的方法;
                    System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“后”编写自己的业务逻辑
                    return returnValue;
                }
            });
            iSinger.sing();
        }
    }
    //测试结果
    "C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" "-javaagent:C:\Program.......
    动态代理---向观众问好
    sing a song
    动态代理---向观众问好
     
    Process finished with exit code 0

    以上就是java代理模式的分类,学习完本篇的内容后,想必大家已经能对静态代理和动态代理有所区分。在实际使用时,可以根据需求自行选择。

    上一篇:python如何获取列表的长度

    下一篇:Python的scikit-image模块是什么?

    相关内容

    • Python实现像awk一样分割字符串

      这篇文章主要介绍了Python实现像awk一样分割字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

      04-16Python分割字符串

      阅读更多
    • python输出打印在一行的方法

      在Python中print默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 。如要使输出的数据打印在一行要在print输出的变量后加逗号。

      02-07python输出怎么只打印在一行

      阅读更多
    • Python中使用while循环实现花式打印乘法表

      今天小编就为大家分享一篇关于Python使用while循环花式打印乘法表,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

      01-21Python使用while循环花式打印乘法表

      阅读更多
    • python提高运行速度的方法

      使用numba。numba是Python的即时编译器,它最适用于使用NumPy数组和函数以及循环的代码。使用Numba的最常用方法是通过其装饰器集合,可以应用于您的函数来指示Numba编译它们。

      03-12python如何提高运行速度

      阅读更多
    • python实现在cmd窗口显示彩色文字的实例方法

      今天小编就为大家分享一篇python实现在cmd窗口显示彩色文字,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

      12-05python实现在cmd窗口显示彩色文字

      阅读更多
    • Python地理空间分析指南

      Python地理空间分析指南

      Python作为一种高级程序设计语言,凭借其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言之一。 本书以地理空间分析为背景,介绍了Python在地理信息处理方面的应用技巧。全书共

      大小:12.4 MBPython

      立即下载
    • 零基础学Python

      零基础学Python

      本书是针对零基础编程学习者研发的Python自学入门教程,详细地介绍了使用 IDLE 及 Python 框架进行程序管理的知识和技术,手把手教,快速摆脱小白窘境,带你开启编程大门

      大小:314 MBpython编程

      立即下载
    • 数据预处理从入门到实战:基于SQL、R、Python

      数据预处理从入门到实战:基于SQL、R、Python

      一本书掌握大数据、人工智能时代需要的数据预处理技术 KDD CUP 2015亚军得主多行业实战经验总结; 54道例题,涵盖常见数据预处理技术; 3个实战案例,快速提升应用能力; 3种语言实现对比,代码优化关键点一目了然; 配套数据 源码可下载; SQL的版本为Redshift,Pyhton的版本为3.6,R的版本的3.4; 双色印刷。 数据提取/数据聚合/数据连接/数据拆分/数据生成/数据扩展 数值型/分类型/日期时间型/字符型/位置信息型 1.习题式结构,带着问题思考、学习,效

      大小:126 MB数据处理

      立即下载

    学习笔记

    13小时36分钟前回答

    python如何调用类方法

    python中的类用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 要想调用类中的方法,首先要定义一个类,python中定义类使用class关键字 class Person(): def __init__(self,name,age):#__init__()方法为类的构造方法 self.name = name self.age = age def detail(self):(通过self调用被封装的内容) print(self.name) print(self.age)obj1 = Person('santos',18)obj1.detail() #python将obj1传给self参数 python调用类中的方法有两种方式:通过对象直接调用和通过self间接调用。 以上就是python如何调用类方法的详细内容,更多请关注码农之家其它相关文章! ……

    37小时12分钟前回答

    Python线程中定位与销毁的详细介绍(附示例)

    本篇文章给大家带来的内容是关于Python线程中定位与销毁的详细介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 开工前我就觉得有什么不太对劲,感觉要背锅。这可不,上班第三天就捅锅了。 我们有个了不起的后台程序,可以动态加载模块,并以线程方式运行,通过这种形式实现插件的功能。而模块更新时候,后台程序自身不会退出,只会将模块对应的线程关闭、更新代码再启动,6 得不行。 于是乎我就写了个模块准备大展身手,结果忘记写退出函数了,导致每次更新模块都新创建一个线程,除非重启那个程序,否则那些线程就一直苟活着。 这可不行啊,得想……