代理模式

首先要分清代理模式(proxy)和委托(delegate)模式的区别?

共性:代理和委托都有一个共性,那就是自己单独做不了或者说是自己做不好。

区别:代理是代理的边缘业务机能,非核心的需求,就算没有代理,主体部分也能独立完成,而委托模式委托的是核心业务机能。所以将代理去掉后被代理对象主体还能够完成业务,而将委托者去掉后,主体几乎没有作用不能完成业务。

代理(agent)则是对应的server,帮助server完成工作,多是由于物理限制,服务端不能直接去客户端收集信息所以需要agent客户端来代理完成。

Spring核心框架中多用到了动态代理模式,例如程序调用方法getBean(),拿到的是程序员的对象吗?当然不是,很大可能是由Spring一层层封装的代理对象,所以spring中要用getbean而非new 对象。

作业:一个B方法,三层代理, A -> log ->caeche -> transaction -> B ,二月六号之前完成,同时还要考虑模块化问题,将三个代理模块化。

接口代理--

静态代理:

Java认为代理方法需从接口中获取,所以代理对象和被代理对象都需要实现同一个接口,然后将接口注入到代理对象中,以便在代理对象重写的接口方法中调用被代理对象的方法(看似是a方法中调用了a方法),也叫接口代理,其中四要素是:本类,接口,本类需要被代理的方法(写在接口中的),handler(代理方法前执行什么,后执行什么),

动态代理:

动态代理的目的是为了代码的重用,通过反射机制获取 本类,接口,以及本类中需要代理的方法,加上handler动态的拼接成一个代理类出来,但是虽然代理类不用自己写了,但是接口还是需要写的。

类代理--

Spring动态代理:

使用cglib反射类中所有的方法,包括私有的方法,这样可以将类中所有的方法都进行代理而不用去根据接口来确定到底需要代理哪些方法,所以又称为类代理。

动态代理虽然实现了代码重用以及简化了开发,但是也有弊端,那就是避开了编译器检查。

Spring中的核心就是动态代理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,680评论 19 139
  • 1 场景问题# 1.1 访问多条数据## 考虑这样一个实际应用:要一次性访问多条数据。 这个功能的背景是这样的;在...
    七寸知架构阅读 3,144评论 1 52
  • 一> 代理模式 概述 代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。...
    奋斗的老王阅读 1,220评论 0 50
  • 之所以定义我和她的关系在这—同学,是因为我们关系有时是路人的甲乙丙,又是超一般的同学关系。 有次上课前我刚落座,她...
    田裡和樹阅读 272评论 0 1
  • 回想童年 那似乎是已是一个遥远的梦 渐渐地 发现梦中的记忆越发越模糊 努力回想 拼凑起早已丢失记忆的碎片 点点滴滴...
    逐梦人生阅读 249评论 1 5

友情链接更多精彩内容