美文网首页
java知识点(二)--反射以及代理模式原理分析。

java知识点(二)--反射以及代理模式原理分析。

作者: yosen | 来源:发表于2019-08-08 10:18 被阅读0次

    1. 什么是反射

    反射(Reflection)就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。反射是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的內部信息,并能直接操作任意对象的内部属性及方法。

    Java反射机制主要提供了以下功能:

    在运行时构造任意一个类的对象

    在运行时获取任意一个类所具有的成员变量和方法

    在运行时调用任意一个对象的方法(属性)

    2. 获取Class对象的三种方式

    1.通过类名获取      类名.class   

    2.通过对象获取      对象名.getClass()  

    3.通过全类名获取    Class.forName(全类名)

    3. 静态代理

    目的:

    (1)通过引入代理对象的方式来间接访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性; 

    (2)通过代理对象对原有的业务增强;

    举个例子:

          我们假设有一个生产茅台酒的类,其内部肯定会有一个制造酒的方法。 客户A想买酒,就必须调用这个方法,然后才能买到酒。假设客户A和酒厂之间相隔万里,A不能每次为了买一点酒,就要不远万里去酒厂买酒。 这个时候就需要一个中间人帮客户从酒厂买好酒 (同时也可以对这个酒进行包装,类似中介) 然后送给客户A,这样不但给A省了很多烦恼,也让酒厂不必面对所有客户,只生产酒就行。 我们把这个中间人称为代理类。对外,代理类也应该有制造酒这个功能,给客户调用,所以我们需要抽离出一个制造酒的接口。让茅台酒,和代理类都实现这个接口。同时对内,代理类自己是不会真正造酒的,所以我们需要代理类持有酒厂的一个对象。在客户需要买酒的时候,内部去调用酒厂的方法。以上就是一个静态代理的简单例子

    用代码实现如下:

    制造酒的接口:

    制造酒的接口

    茅台酒类:

    实现了MakeWinery接口,才能生产

    代理类:

    代理类可以提供额外的业务逻辑对生产酒的方法进行包装。

    调用:

    客户在想买酒,可以直接找到代理,跳过Maotai,且代理能提供更好的服务

          静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类。一般来说,被代理对象和代理对象是一对一的关系,或者,一个代理对象对应多个被代理对象也是可以的

         思考一下,当我们还想要各种各样品牌的酒时,就需要创建N个代理类,或者在一个代理类中,创建多个代理对象,这显然违背了java设计模式里面的开闭原则,第一种方法对象量多、代码量大,从而导致代码复杂,可维护性差的问题事。而第二种方式则会出现扩展能力差的问题。因此,变引入了我们的动态代理模式。

    4. 动态代理

    5. 动态代理,在java中的实现

    相关文章

      网友评论

          本文标题:java知识点(二)--反射以及代理模式原理分析。

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