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

建设工程合同 网站网站开发入门需要学什么

建设工程合同 网站,网站开发入门需要学什么,网络综合设计实验报告,临沂阿里巴巴网站建设什么是代理模式#xff1f; 定义 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下#xff0c;一个对象不适合或者不能直接引用另一个对象#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 ——百度百科 代理模式的角色 抽象角色#xff1a;代…什么是代理模式   定义     为其他对象提供一种代理以控制对这个对象的访问。在某些情况下一个对象不适合或者不能直接引用另一个对象而代理对象可以在客户端和目标对象之间起到中介的作用。                                                                   ——百度百科   代理模式的角色   抽象角色代理对象和真实对象的共同接口   代理角色代理对象角色内部含有对真实对象的引用从而可以操作真实对象同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象。同时代理对象可以在执行真实对象操作时附加其他的操作相当于对真实对象进行封装。   真实角色代理角色所代表的真实对象是我们最终要引用的对象。   示意图      代理模式的分类及使用 静态代理 1 package staticProxy; 2 3 // 抽象角色真是对象与代理对象的共同接口 4 public interface Subject { 5 public void request(); 6 } 抽象角色 1 package staticProxy;2 3 //代理对象用来被客户端直接调用的类内部被注入真实对象可以在调用真是对象的方法前后做预处理和后处理4 public class ProxyClass implements Subject {5 6 Subject subject;7 8 ProxyClass (Subject subject) {9 this.subject subject; 10 } 11 12 Override 13 public void request() { 14 System.out.println(prefix-process!); 15 subject.request(); 16 System.out.println(suffix-process!); 17 } 18 19 } 代理角色 1 package staticProxy;2 3 //真实对象委托类4 public class RealClass implements Subject {5 6 Override7 public void request() {8 System.out.println(Im realClass!);9 } 10 11 } 真实角色 1 package staticProxy;2 3 //客户端4 public class StaticProxy {5 public static void main(String[] args) {6 Subject subject new ProxyClass(new RealClass());7 8 subject.request();9 } 10 } 客户端     静态代理的缺点很显著对每一个委托类都需要创建一个代理类为了解决这个问题java提供了动态代理。 动态代理     抽象角色与真实角色的定义和静态代理完全一致这里不再重复定义     动态代理类需要继承自InvocationHandler接口并实现其中的invoke方法。 1 package dynamicProxy;2 3 import java.lang.reflect.InvocationHandler;4 import java.lang.reflect.Method;5 6 public class ProxyClass implements InvocationHandler {7 8 Object subject;9 10 public ProxyClass(Object subject) { 11 this.subject subject; 12 } 13 14 Override 15 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 16 System.out.println(prefix-process!); 17 method.invoke(subject, args); 18 System.out.println(suffix-process!); 19 return null; 20 } 21 22 } 动态代理类 1 package dynamicProxy;2 3 import java.lang.reflect.Proxy;4 5 public class DynamicProxy {6 public static void main(String[] args) {7 8 Subject subject (Subject) Proxy.newProxyInstance(RealClass.class.getClassLoader(),9 new Class[] {Subject.class}, new ProxyClass(new RealClass())); 10 11 subject.request(); 12 } 13 } 客户端 动态代理的实现原理 动态代理的实现主要依赖于java.lang.reflect.InvocationHandler接口与java.lang.reflect.Proxy类其实现原理是基于java的反射技术。 InvocationHandler接口     动态代理类需要继承自InvocationHandler接口此接口中只包含一个方法invoke方法接口原型如下 1 package java.lang.reflect;2 3 public interface InvocationHandler {4 5 /**6 * proxy代表代理对象本身用于调用本代理对象的其他方法7 * method代表正在被调用的委托类的方法8 * args代表调用方法的参数9 */ 10 public Object invoke(Object proxy, Method method, Object[] args) 11 throws Throwable; 12 } InvocationHandler Proxy类     Proxy类中定义了很多的方法但根据上面动态代理的应用我们看到最重要的一个方法就是newProxyInstance方法该方法的作用就是动态创建一个代理类对象 1 /**2 * loader代表了委托类的类加载器3 * interfaces代表了委托类的接口数组4 * h代表委托类的实例5 */6 CallerSensitive7 public static Object newProxyInstance(ClassLoader loader,8 Class?[] interfaces,9 InvocationHandler h) 10 throws IllegalArgumentException 11 { 12 // 判断委托类实例是否为空如果未空抛异常 13 Objects.requireNonNull(h); 14 15 final Class?[] intfs interfaces.clone(); 16 final SecurityManager sm System.getSecurityManager(); 17 if (sm ! null) { 18 checkProxyAccess(Reflection.getCallerClass(), loader, intfs); 19 } 20 21 /* 22 * 获取获取代理类的Class实例 23 */ 24 Class? cl getProxyClass0(loader, intfs); 25 26 /* 27 * Invoke its constructor with the designated invocation handler. 28 */ 29 try { 30 if (sm ! null) { 31 checkNewProxyPermission(Reflection.getCallerClass(), cl); 32 } 33 34 //获取代理类的Constructor对象 35 final Constructor? cons cl.getConstructor(constructorParams); 36 final InvocationHandler ih h; 37 if (!Modifier.isPublic(cl.getModifiers())) { 38 AccessController.doPrivileged(new PrivilegedActionVoid() { 39 public Void run() { 40 cons.setAccessible(true); 41 return null; 42 } 43 }); 44 } 45 46 //利用反射原理中使用constructor动态创建动态代理类型 47 return cons.newInstance(new Object[]{h}); 48 } catch (IllegalAccessException|InstantiationException e) { 49 throw new InternalError(e.toString(), e); 50 } catch (InvocationTargetException e) { 51 Throwable t e.getCause(); 52 if (t instanceof RuntimeException) { 53 throw (RuntimeException) t; 54 } else { 55 throw new InternalError(t.toString(), t); 56 } 57 } catch (NoSuchMethodException e) { 58 throw new InternalError(e.toString(), e); 59 } 60 } newProxyInstance 动态代理的应用场景   动态代理最著名的应用场景就是spring中的aop   转载于:https://www.cnblogs.com/qq455988971/p/8242946.html
http://www.zqtcl.cn/news/41720/

相关文章:

  • 网站上的地图导航怎么做西安seo整站优化
  • 学校网站建设先进事迹Wordpress 外链图片6
  • 潍坊做网站哪家好扬中网络公司
  • 上海网站制作网站株洲微豆网络科技有限公司网页设计
  • 广州做网站的价格wordpress修改地址后
  • 惠安网站建设报价营销策略是什么意思
  • 企业网站后台南高齿网站是谁做的
  • 手机访问wordpress网站卡wordpress导航栏目
  • 新密做网站推广wordpress addrewriterule
  • html企业网站模板下载网站木马诊断
  • 江门网站推广深圳代理记账行业协会
  • 烟台网站建设兼职济南协会网站设计团队
  • 循化网站建设公司沈阳沈河seo网站排名优化
  • 网站设计建设 网络营销推广光明区住房和建设局网站
  • 网站按钮设计wordpress主题少儿教育类
  • 龙岩app定制开发西安seo服务公司排名
  • 网站开发公司哪里寻找客源红光网站建设
  • 郑州网站排名优化外包淄博网站建设0533cl
  • 嘉兴网站排名优化价格wordpress postline
  • 做网站找外包公司要要搞清楚什么wordpress 写插件吗
  • 网站开发课程总结seo方法图片
  • 对网站建设培训的建议泰安58同城二手房出售信息
  • 网站顶部flash下载网站开发的实验报告
  • 建个企业网站对公司宣传有用吗互联网广告投放平台加盟
  • 做网站的可以信吗wordpress定制主题开发
  • rp网站做多大二网站手
  • 网站架构模式用哪种百青藤广告联盟
  • 建设个人网站用什么软件wordpress菜单侧边栏
  • 做电影网站需要什么手续公众号开发实践 pdf
  • 企业网站建设方案效果深企在线