第一篇blog文章,自己是个菜鸟,希望大家能有指出文章中的错误,大家一起进步。
上图是代理模式的实现,代理模式主要是用于客户端对真实对象访问之前进行一些控制,例如日志输出,权限控制等,如上图,客户程序只能通过SubjectProxy来访问RealSubject,因为代理类和实现类都是实现一个同一个Subject接口,所以在客户程序看来,他只知道访问的是实现Subject接口的一个对象,而不管是哪个类的对象,代理类持有被代理对象的引用,在调用方法时,代理对象可以先做一些操作,然后再调用被代理对象的方法。但是这样做的缺点是,一个Subject就要创建一个代理类,如果Subject很多,那么就需要为每个Subject都创建一个代理类,类的数量就会变得很庞大,更重要的是,如果要修改代理功能,比如原来是没有日志输出的,现在要加上日志输出,哪么你需要在每个代理类中添加日志输出的代码,(不过要是权限控制的话,这样的静态代理是不是能实现更细粒度的权限控制?比如我对这个对象的方法可以让所有人访问,而其他一个对象需要有某某权限才能访问。如果在动态代理下,也可以实现对每个对象的细粒度控制,不过那样动态代理类应该会非常庞大了吧?),
在Java中,还有一种动态代理,他可以解决上面当Subject很多的时候,每个代理都要生成一个代理类的问题,其主要用到了java.lang.reflect包下的Proxy和InvocationHandler.
首先我们让一个Handler类实现InvocationHandler接口,然后用Proxy的Proxy.newProxyInstance(loader, interfaces, h)方法生成一个动态代理对象,其中的三个参数分别为:第一个制类的装载器,第二个是要生成的动态代理类的接口,第三个是实现了InvocationHandler接口的Handler类,当调用生成出来的动态代理对象的方法时,他就自动去调用Handler的invoke(InvocationHandler接口要求必须实现invoke方法)这样就实现了动态代理,即使有很多类,也只要一个代理即可。
还有两个不太明白的地方就是invoke方法里的第一个参数,proxy,应该就是动态代理对象,但是他传到invoke里面做什么呢?因为在invoke里再调用他肯定会形成死循环,估计是不是invoke方法调用的时候要用到proxy这个对象,但是如果我们是用不到这个对象的,sun为什么还写在这里呢?不能把它隐藏起来么?还有就是上面我说的细粒度的权限控制问题,如果几个对象的权限访问机制都不一样,哪么就必须得在invoke中来处理,这样的话,invoke方法将非常庞大,希望各位高手能指点下哈,本人第一次写blog,感觉自己的表达能力真的是很差,写这么一篇文章就花了1个多小时,呵呵,以后只能多加练习了。
- 大小: 123.9 KB
分享到:
相关推荐
Java动态代理机制是Java语言提供的一种强大的功能,它允许在运行时创建代理对象来实现特定接口,从而可以灵活地扩展或增强已有代码的功能。在Java中,动态代理主要通过两个类来实现:`java.lang.reflect.Proxy` 和 `...
JAVA动态代理机制是Java语言中一个非常重要的特性,它允许我们在运行时创建具有特定接口的代理对象,这些代理对象可以在调用实际方法之前或之后执行额外的操作,如日志记录、性能监控、事务管理等。这个特性使得我们...
Java 动态代理机制是Java反射API的一部分,它允许我们在运行时创建代理类,这些代理类可以实现我们指定的一组接口。动态代理的核心是`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。 1....
Java动态代理机制是一种在运行时创建代理类和代理对象的技术,它允许我们在不修改源代码的情况下,对已有的接口或类进行扩展,增加新的功能。动态代理主要应用于事件监听、事务处理、性能监控等场景,提供了更加灵活...
Java 动态代理机制是Java语言提供的一种在运行时创建代理类和代理对象的机制,主要涉及`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。动态代理通常用于实现AOP(面向切面编程)、事件...
Java 动态代理机制是Java反射机制的一部分,它允许开发者在运行时动态创建代理类和对象,以便在方法调用时插入自定义的行为。这种机制主要用于实现AOP(面向切面编程)和拦截器模式,提供了对方法调用的额外控制和...
Java动态代理机制详解_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
Java 动态代理机制是Java语言提供的一种在运行时创建代理类和代理对象的机制,主要涉及`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。这一机制使得开发者无需手动编写代理类代码,只需...
Java动态代理机制是一种在运行时创建代理类和对象的技术,它可以让我们在不修改原有代码的情况下,为已有接口或类添加额外的功能。动态代理通常用于实现AOP(面向切面编程)、事件监听、缓存处理、日志记录等功能。...
在Java动态代理机制中,`InvocationHandler`接口扮演着关键角色。它定义了一个`invoke()`方法,当代理对象的方法被调用时,实际上是调用了`InvocationHandler`的`invoke()`方法。这个方法接收三个参数:代理对象、...
本文通过分析Java动态代理的机制和特点,解读动态代理类的源代码,并且模拟推演了动态代理类的可能...Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地
通过上述介绍,我们可以看到Java代理模式及其动态代理机制为开发者提供了强大的功能扩展能力。无论是通过代理模式控制对象的访问,还是利用Java动态代理实现特定时刻的行为增强,都是在不改变现有代码结构的前提下...
Java动态代理机制是Java语言提供的一种强大的功能,它允许在运行时创建代理对象来实现指定的接口。这一机制使得我们可以在不修改已有代码的情况下,为已有接口增加额外的功能或者增强已有功能的行为。在Java中,动态...
总结来说,Java动态代理机制提供了在运行时动态创建具有指定接口的代理对象的能力,使得我们可以在不修改源代码的情况下,对目标对象进行功能增强。这在很多场景下都非常有用,比如AOP(面向切面编程)、事件监听、...
#### 二、Java动态代理机制 Java动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。`Proxy`类提供了一个静态方法`newProxyInstance()`用于创建动态代理对象,而`...