永发信息网

java 我不理解动态代理的意义

答案:4  悬赏:60  手机版
解决时间 2021-01-23 00:52
java 我不理解动态代理的意义
最佳答案
人家是动态编程,需要在原来的方法的功能基础上再添加一些功能,而不用改变这个方法的签名,原来调用这个方法的类依然能正常工作。

比如,现在要把一段文本发送给另一个人,普通方法是 void send(File a),现在我们弄出个特性,就像 Spring AOP 那样,在 send 之前给这个 a 压缩一下。原来的程序没有压缩功能,现在我们需要添加的话而不改变原来所有的代码的话就得用类似 AOP 这样的代码来处理。

一般一个无法再继承的类和方法,要用代理,而能够继承的类和方法可以在内在中直接生成一个新的 java 类继承它然后覆盖掉那个 send 方法,像 hibernate/spring/jboss 都把这些自动完成了。
而像 AspectJ 这种 AOP 刚不同,它直接把人家的 class 代码修改了,它就不需要使用代理。

这些在新的 JDK 6 中都可以通过 Instrument 来做到,不过也是个通用的方法,还得通过规则来定制什么情况下处理,什么时候不处理。追问我刚接触不太懂aop,aop是不是把原来的东西,添加一些功能而不改变原来的东西,我google了一下aop感觉像是给主体加附加功能(不影响主体),对吗?追答对,在不需要原来的作者明确改动代码的情况下添加新功能。比如你没有原来的代码但想添加新功能,或者你需要的新功能仅用于某个地方而原来的功能用到更多的地方,所以不打算修改原来的功能而只是定制你新加的这部分,那么使用 AOP 原来的代码不需要修改,你只需要配置 AOP 并新增你自己的功能,重新编译一下就好了。你听说过 Hibernate Lazy Initialization 吧,这叫延迟加载,也就是当一个对象有很多 detail 表时,以前自动把 detail 表的数据全抓取了导致这些对象可能没有被使用而浪费时间或浪费内存,于是懒加载的想法出现了,为了让懒加载对用户编程来说是透明的,你不需要明确的写代码实现它,Hibernate 是使用 AOP 来解决的。你的代码没有为此作出任何改变但新功能添加上来了。
全部回答
理解动态代理的核心:
Proxy.newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)
这个方法即是通过Java的反射机制动态地生成了代理类。通过传入的InvocationHandler来调用了被代理对象的方法。
然后是你说的意义。在编程中我们希望自己的代码是灵活的而不是死板的,能动态配置的东西就不要写死。这样来提高程序的可扩展性。如果不使用代理模式,将来我们想在当前的业务逻辑下添加一些其他的处理,比如日志、校验等等,就不得不侵入原有的业务代码。而这些操作其实和真正的业务无关,我们不想它们侵入业务代码。这时候就需要使用代理模式登场了。我们通过代理来调用原有的业务代码,又可以在业务逻辑之前和之后添加一些其他的逻辑。
个人理解。
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到三个角色:
抽象角色:声明真实对象和代理对象的共同接口;
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

  首先你要明白"代理模式 "
  按照代理的创建时期,代理类可以分为两种:
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。
  动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展
性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 
包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。 
spring的动态代理是用cglib工具包,它实际是操作字节码完成的代理
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
比熊成犬时期混合口味爱贝迪狗粮吃了怎么样?
绿叶广场怎么样?好不好?值不值得买?
咸牛奶的家常做法大全怎么做好吃视频
汪曾祺的《受戒》所表达的思想
为什么家里的装w i f l 手机能用电脑上不了网
我家平困想上腾讯公益怎么上这个平台
怎么样能找到附近的女人聊天
在划船时,把水向后划,水在向后动,为什么船
厦门翔业集团有限公司怎么样?
我的世界怎么改造小白刷怪笼
滴滴账号客服说,正常,但是在热点区域,就是
寒假去越南游玩 酒店一般会多少钱
(-3.14-2.17)×(-4)
女命八字丁酉、己西、戊申、丁已请指出用神
复合岩棉板和岩棉板有什么区别
推荐资讯
凉菜素鲍三丝怎么做
华为型号Rl0-AL00
150*50*10电子标签什么意思
下列各项对语法知识的判断与分析,正确的一项
家里最近两年不顺利老出事请高手指点指点怎样
远近光灯,前后灯,雾灯,闪光灯,危险警报灯
莉雅时尚新娘造型地址在哪,我要去那里办事,
原配带入找上家门打小三,该是喝彩还是怜悯
活血化瘀的中成药有哪些
There is a look on her face. She must hav
两电阻R1:R2=2:3,将它们串联在电路中,则
为什么说只有费米面附件的电子才对金属的导电
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?