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

哪些网站可以做网店网站设计服务费做什么费用

哪些网站可以做网店,网站设计服务费做什么费用,网页美工设计图,网站域名申请之后如何做网站代理模式是常见的设计模式之一#xff0c;顾名思义#xff0c;代理模式就是代理对象具备真实对象的功能#xff0c;并代替真实对象完成相应操作#xff0c;并能够在操作执行的前后#xff0c;对操作进行增强处理。#xff08;为真实对象提供代理#xff0c;然后供其他对…代理模式是常见的设计模式之一顾名思义代理模式就是代理对象具备真实对象的功能并代替真实对象完成相应操作并能够在操作执行的前后对操作进行增强处理。为真实对象提供代理然后供其他对象通过代理访问真实对象 分为 静态代理 动态代理 jdk动态代理 cglib动态代理 静态代理 真实类和代理类要实现同一个接口在代理类中实现真实类的方法同时可以进行真实类方法的增强处理在一个代理类中就可以完成对多个真实对象的注入工作。 public interface IRentHouse {void rentHouse(); } public class RentHouse implements IRentHouse {Overridepublic void rentHouse() {System.out.println(实现租房);} } public class IntermediaryProxy implements IRentHouse {private IRentHouse iRent;public IntermediaryProxy(IRentHouse iRentHouse) {iRentiRentHouse;}Overridepublic void rentHouse() {System.out.println(交中介费);iRent.rentHouse();System.out.println(中介负责维修管理);} } //client测试类 public class TestStaticProxy {public static void main(String[] args) {//定义租房IRentHouse iRentHouse new RentHouse();//定义中介IRentHouse intermediaryProxy new IntermediaryProxy(iRentHouse);//中介租房intermediaryProxy.rentHouse();} } 动态代理 从静态代理的代码中可以发现静态代理的缺点显而易见那就是当真实类的方法越来越多的时候这样构建的代理类的代码量是非常大的所以就引进动态代理. 动态代理允许使用一种方法的单个类代理类为具有任意数量方法的任意类真实类的多个方法调用提供服务 JAVA 反射机制是在运行状态中对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用它的任意一个方法和属性这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。 jdk动态代理(接口代理) Jdk代理涉及到java.lang.reflect包中的InvocationHandler接口和Proxy类核心方法是 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable jdk动态代理过程中实际上代理的是接口是因为在创建代理实例的时候依赖的是java.lang.reflect包中Proxy类的newProxyInstance方法该方法的生效就恰恰需要这个参数 public static Object newProxyInstance(ClassLoader loader,Class?[] interfaces,InvocationHandler h) throws IllegalArgumentException{…… } 下面以案例来说明jdk动态代理的完整过程 //接口 public interface Person {void wakeup();void sleep(); } //实现类1 public class Student implements Person{private String name;public Student() {}public Student(String name) {this.name name;}Overridepublic void wakeup() {System.out.println(学生name早晨醒来啦);}Overridepublic void sleep() {System.out.println(学生name晚上睡觉啦);} } //代理类 public class JDKDynamicProxy implements InvocationHandler {private Object bean;public JDKDynamicProxy(Object bean) {this.beanbean;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {String methodnamemethod.getName();if (methodname.equals(wakeup)){System.out.println(早安~~~);}else if(methodname.equals(sleep)){System.out.println(晚安~~~);}return method.invoke(bean,args);} } //测试类 public class TestJDKDynamicProxy {public static void main(String[] args) {JDKDynamicProxy proxy new JDKDynamicProxy(new Student(张三));//创建代理实例Person student (Person) Proxy.newProxyInstance(proxy.getClass().getClassLoader(), new Class[]{Person.class}, proxy);student.wakeup();student.sleep();} } 输出结果为 早安~~ 学生张三早晨醒来啦 晚安~~ 学生张三晚上睡觉啦 接口中的方法以及代理类中重写的invoke方法但是invoke()方法并不是显式调用的是在创建代理实例的过程中生成的接口虚拟代理类中调用了invoke方法。(把Sproxy0的实例强制转换成对应接口类型的引用然后执行接口方法进而执行代理类中invoke ()) 总结对比 1.静态代理中代理类和真实类实现的是同一个接口重写同样的方法jdk动态代理中代理类和真实类关系不大代理类实现无侵入式的代码扩展。 2.静态代理中当接口中方法增加的时候在代理类代码量也会增加显然是不妥的jdk动态代理解决了这个问题当业务增加代理类的代码不会增加。 3.jdk动态代理实现的是jdk自带InvocationHandler接口实现了这个接口的类也叫拦截器类也叫代理类。 cglib动态代理 从上面可以看出jdk动态代理的前提条件是要有接口存在那还有许多场景是没有接口的这个时候就需要cglib动态代理了CGLIB(Code Generation Library)是一个基于ASM的字节码生成库它允许我们在运行时对字节码进行修改和动态生成。CGLIB通过继承方式实现代理。cglib动态代理过程中生成的是实现类的子类cglib是如何凭空创造的实现类的子类的下面是测试代码 //所需的代理类 public class CglibProxy implements MethodInterceptor {private Enhancer enhancernew Enhancer();private Object bean;public CglibProxy(Object bean) {this.bean bean;}public Object getProxy(){//设置需要创建子类的类enhancer.setSuperclass(bean.getClass());enhancer.setCallback(this);return enhancer.create();}Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {String methodName method.getName();if (methodName.equals(wakeup)){System.out.println(早安~~~);}else if(methodName.equals(sleep)){System.out.println(晚安~~~);}return method.invoke(bean,objects);} } //测试类 public class TestCglibProxy {public static void main(String[] args) {//生成虚拟代理类的代码本来虚拟代理子类是看不见的//下面这句话的作用就是把执行过程中cglib增强后的class字节码文件System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, D:\\aop);CglibProxy proxy new CglibProxy(new Cat(咪咪));Cat cat (Cat) proxy.getProxy();cat.wakeup();cat.sleep();} } 总结 cglib动态代理和jdk动态代理的区别显而易见但是实现逻辑差不多cglib代理类是通过实现MethodInterceptor重写intercept方法通过生成被代理类的子类来达到代理增强代码的目的而Jdk代理是通过实现InvocationHandler重写invoke方法通过生成接口的代理类来达到代码增强的目的所以jdk动态代理的实现需要接口cglib则不需要spring5.0以上以及springboot2.0以上默认采用cglib动态来实现AOP。
http://www.w-s-a.com/news/706603/

相关文章:

  • wap网站psd成立公司在什么网站
  • 网站建设婚恋交友聊城网站建设费用
  • 沈阳网站建设联系方式尉氏县金星网架公司
  • 医院网站建设实施方案基础微网站开发信息
  • 网站建设开发服务费记账百度指数搜索
  • 网站建设备案流程windows优化大师有必要安装吗
  • 怎么网站定制自己做网站卖视频
  • 网站开发二线城市网站制作过程中碰到的问题
  • 最好网站建设公司制作平台小程序开发教程资料
  • 陕西省高速建设集团公司网站国内做会展比较好的公司
  • 建设学校网站的原因网页设计实训报告1500
  • 网站建设客户来源江门网站设计华企立方
  • 自己如何做棋牌网站宁波网络推广优化方案
  • 深圳招聘网站推荐seo网站推广方案
  • 彩票网站开发 合法学术会议网站建设
  • 商务网站建设论文答辩pptseo技术博客
  • 怎样才能有自己的网站桂林搭建公司
  • 哪个网站做视频赚钱万科
  • 莆系医疗网站建设wp如何做网站地图
  • 网站建设应急处置方案团购网站 备案问题
  • 网站建设 岗位职责浙江中天建设集团有限公司网站
  • 西海岸建设局网站用wordpress建站学什么
  • 网站静态和动态学校网站建设流程步骤
  • 做群头像的网站在线怎么做俄语网站
  • 西安网站定制开发国内cms推荐
  • windows网站建设教程视频教程wordpress默认用户头像
  • 做网站需要什么软件wordpress会员邮件通知
  • 技术支持网站合肥网站搭建
  • 无为网站设计免费制作企业网站平台
  • 社交网站第一步怎么做房屋装修效果图用什么软件