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

扬中网站建设推广设计公司做网站价格

扬中网站建设推广,设计公司做网站价格,如何自己开发一个软件,百度应用中心文章目录 代理模式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.hkea.cn/news/14485626/

相关文章:

  • 上海aso优化公司宁波seo优化项目
  • 网站收录提交入口大全定制网站建设费用预算
  • 巴青网站制作腾讯云服务器12元一年
  • 网站外包后呗百度降权网站营销的重要价值
  • 网站建立的意义百度app内打开
  • 石家庄做网站建设江门专用网站建设
  • 网站建设信息公开和解读回应沈阳关键词优化电话
  • 大连网站制作网站自适应营销网站
  • 软件网南京百度seo排名优化
  • 怎么做网站的软文推广南宁设计网站
  • 陈坤做直播在哪个网站怎么制作公众号长图
  • 杭州网站设计公司价格柳州哪家公司做网站好
  • 网站建设文编企点官网
  • jquery 购物网站厦门百度网站建设
  • 电商网站报价重庆seo入门教程
  • 为您打造高端品牌网站重置wordpress密码
  • 专业网站建设咨询第一家中文商务网站
  • 电商网站开发步骤重庆网站建设公司销售
  • 建设银行手机官方网站下载安装网站模板图片
  • 网站开发商城1688产品经理如何看待网站开发
  • 保险网站排名广告设计与制作需要学什么
  • wordpress站点取名开发比较实用的软件
  • 网站建设保密条款wordpress 做社区
  • 深圳企业网站制作怎么开电商网店
  • 企业网站的短视频中心模板为什么要建设应急管理网站
  • 网站建设 尚瑞科技做网站制作的公司
  • 漯河市城市建设投资公司网站工信部网站备案密码
  • 网站语言切换前端可以做么购物网站源码
  • 成都市建设工程施工安监站网站鄂州seo厂家
  • 佛山网站搜索引擎优化网站开发过程会遇到的问题