当前位置: 首页 > news >正文

我的世界做圆网站东营网站建设服务电话

我的世界做圆网站,东营网站建设服务电话,aspcms开源企业网站建设系统,母婴网站开发文章目录 代理模式1、静态代理2、动态代理jdk自带动态代理 3、Cglib代理 来和大家聊聊代理模式 代理模式 代理模式#xff1a;即通过代理对象访问目标对象#xff0c;实现目标对象的方法。这样做的好处是#xff1a;可以在目标对象实现的基础上#xff0c;增强额外的功能操… 文章目录 代理模式1、静态代理2、动态代理jdk自带动态代理 3、Cglib代理 来和大家聊聊代理模式 代理模式 代理模式即通过代理对象访问目标对象实现目标对象的方法。这样做的好处是可以在目标对象实现的基础上增强额外的功能操作实现对目标功能的扩展。 这涉及到一个编程思想不要随意去修改别人已经写好的代码或者方法有坑。如果需要修改可以通过代理模式实现。 代理模式通常有三种实现写法静态代理、动态代理、Cglib代理 代理模式的UML图 从UML图中可以看出代理类与真正实现的类都是继承了抽象的主题类这样的好处在于代理类可以与实际的类有相同的方法可以保证客户端使用的透明性。 1、静态代理 我们先看针对上面UML实现的例子再看静态代理的特点。 Subject接口的实现 public interface Subject {void visit(); }实现了Subject接口的两个类 public class RealSubject implements Subject {private String name byhieg;Overridepublic void visit() {System.out.println(name);} } public class ProxySubject implements Subject{private Subject subject;public ProxySubject(Subject subject) {this.subject subject;}Overridepublic void visit() {subject.visit();} }具体调用如下 public class Client {public static void main(String[] args) {ProxySubject subject new ProxySubject(new RealSubject());subject.visit();} }通过上面的代理代码我们可以看出代理模式的特点代理类接受一个Subject接口的对象任何实现该接口的对象都可以通过代理类进行代理增加了通用性。但是也有缺点每一个代理类都必须实现一遍委托类也就是realsubject的接口如果接口增加方法则代理类也必须跟着修改。其次代理类每一个接口对象对应一个委托对象如果委托对象非常多则静态代理类就非常臃肿难以胜任。 2、动态代理 动态代理有别于静态代理是根据代理的对象动态创建代理类。这样就可以避免静态代理中代理类接口过多的问题。动态代理是实现方式是通过反射来实现的借助Java自带的java.lang.reflect.Proxy,通过固定的规则生成。 其步骤如下 编写一个委托类的接口即静态代理的Subject接口 实现一个真正的委托类即静态代理的RealSubject类 创建一个动态代理类实现InvocationHandler接口并重写该invoke方法 在测试类中生成动态代理的对象。 第一二步骤和静态代理一样不过说了。第三步代码如下 public class DynamicProxy implements InvocationHandler {private Object object;public DynamicProxy(Object object) {this.object object;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result method.invoke(object, args);return result;} }第四步创建动态代理的对象 Subject realSubject new RealSubject(); DynamicProxy proxy new DynamicProxy(realSubject); ClassLoader classLoader realSubject.getClass().getClassLoader(); Subject subject (Subject) Proxy.newProxyInstance(classLoader, new Class[]{Subject.class}, proxy); subject.visit();创建动态代理的对象需要借助Proxy.newProxyInstance。该方法的三个参数分别是 ClassLoader loader表示当前使用到的appClassloader。 Class?[] interfaces表示目标对象实现的一组接口。 InvocationHandler h表示当前的InvocationHandler实现实例对象。jdk自带动态代理 java.lang.reflect.Proxy 作用动态生成代理类和对象 java.lang.reflect.InvocationHandler(处理器接口) 可以通过invoke方法实现对真实角色的代理访问每次通过Proxy生成代理类对象时都指定对对应的处理器对象 3、Cglib代理 要实现Cglib代理必须引入cglib.jar 包由于Spring-core包中已经包含了cglib功能且大部分Java项目均引入了spring 相关jar包这边使用spring的cglib来讲解。他俩实现方式都是一样的 public class CglibProxy implements MethodInterceptor {//目标对象private Object obj;public CglibProxy(Object obj){this.objobj;}//给目标对象创建一个代理对象public Object getProxyInstance(){//1.工具类Enhancer en new Enhancer();//2.设置父类en.setSuperclass(obj.getClass());//3.设置回调函数en.setCallback(this);//4.创建子类(代理对象)return en.create();}Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println(CglibProxy---------);return method.invoke(obj,objects);} }说明可以看出Cglib代理模式实现不需要目标对象一定实现接口故目标对象如果没有实现接口可以使用cglib代理模式。其实Spring的代理模式也是这么实现的。
http://www.tj-hxxt.cn/news/229182.html

相关文章:

  • 网站后缀名自己做网站百度会收录
  • 如何做网站关键词排名朝阳区十大互联网
  • 网站服务器建设软件深圳全网整合营销
  • 北京网站备案域名外贸营销型网站设计
  • 湖南金辉建设集团有限公司网站湖南中高风险地区
  • 济宁网站建设公司有哪些html用什么编译器编写
  • 从零开始网页制作教程微博seo排名优化
  • 深圳网站建设套餐搜索引擎环境优化
  • 专业网站建设价格最优竞价网站托管
  • 丹棱县 网站建设网页制作模板主题
  • 网站索引下降如何解决免费整套ppt模板下载网站
  • 崇州市建设局网站怎么建立微信大转盘的网站服务
  • 常州网站建设段新浩网站建设板块免费下载
  • 网站建设中可能升级毕业设计代做网站有哪些
  • 唐山工程建设信息网站网站建设费属于广宣费吗
  • 如何给企业做网站seo顾问阿亮
  • 网站设计与网页制作岗位招聘信息小学网站建设方案书
  • 网站建设运维自查问题清单wordpress实现用户中心
  • wordpress 邮件配置文件帮助网站网站做优化
  • 深圳网站制作公司深圳app开发洪梅镇仿做网站
  • 淄博网站优化推广怎样制作网页木马
  • 网站建设需要收集资料吗设计网页作业
  • nas可以做网站设计方案汇报
  • 展览搭建设计网站广东阳江房产网
  • 网站建设最关键的两个素材做php网站用什么软件开发
  • 做公司网站比较好的wordpress知更鸟打赏
  • 成都网站建设空间ui设计在哪个网站可以接做
  • 粤icp备网站建设 中企动力广州网站形式
  • app应用下载网站源码免备案网站主机
  • 房地产景区网站建设方案百度推广联系方式