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

珠宝手机网站模板广西建设部投诉网站

珠宝手机网站模板,广西建设部投诉网站,h5网站开发用什么软件制作,著名的国外设计网站Java三种代理模式#xff1a;静态代理、动态代理和CGLIB代理 代理模式 代理模式是23种设计模式种的一种。代理模式是一种结构型设计模式#xff0c;它允许为其他对象提供一个替代品或占位符#xff0c;以控制对这个对象的访问。代理模式可以在不修改被代理对象的基础上静态代理、动态代理和CGLIB代理 代理模式 代理模式是23种设计模式种的一种。代理模式是一种结构型设计模式它允许为其他对象提供一个替代品或占位符以控制对这个对象的访问。代理模式可以在不修改被代理对象的基础上通过扩展代理类进行一些功能的附加与增强。 代理模式的构成 适配器模式一般包含三种角色 抽象主题角色Subject通过接口或抽象类声明真实角色实现的业务方法。代理主题角色Proxy实现抽象角色是真实角色的代理访问层通过真实角色的业务逻辑方法来实现抽象方法并可以附加自己的操作。真实主题角色RealSubject实现抽象角色定义真实角色所要实现的业务逻辑供代理角色调用。 代理模式主要有三种形式分别是静态代理、动态代理也称JDK代理、接口代理和CGLIB代理在内存动态创建对象而不需要实现接口也可属于动态代理得范畴 静态代理 静态代理是定义父类或者接口然后被代理对象即目标对象与代理对象一起实现相同的接口或者是继承相同父类。代理对象与目标对象实现相同的接口然后通过调用相同的方法来调用目标对象的方法。 优点可不修改目标对象的功能通过代理对象对目标功能扩展。缺点因为代理对象需要与目标对象实现一样的接口所以会有很多代理类一旦接口增加方法目标对象与代理对象都要维护。 public interface Animal {void eat(); }public class Dog implements Animal {Overridepublic void eat() {System.out.println(吃吃吃);} }public class DogProxy implements Animal {private Animal target; //通过接口聚合目标对象public DogProxy(Animal target) {this.target target;}Overridepublic void eat() {System.out.println(静态代理开始);target.eat();System.out.println(静态代理结束);} }public class Main {public static void main(String[] args) {//创建被代理对象Dog dog new Dog();//创建代理对象, 同时将被代理对象传递给代理对象DogProxy dogProxy new DogProxy(dog);//通过代理对象调用到被代理对象的方法dogProxy.eat();} }动态代理 动态代理是在运行时动态生成代理类不需要手动编写代理类。Java种的动态代理主要是使用java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler接口实现。 优点灵活性高、减少重复代码、统一处理逻辑、可以代理多个真实类。 缺点基于反射机制性能较低且无法代理final类和方法。 动态代理最主要的就是Proxy.newProxyInstance方法它是用于创建动态代理对象的静态方法。它接受三个参数 ClassLoader用于加载动态代理类的类加载器。 interfaces要代理的接口数组。 InvocationHandler实现了InvocationHandler接口的对象用于处理代理对象的方法调用。 public interface Animal {void eat(); }public class Dog implements Animal {Overridepublic void eat() {System.out.println(吃吃吃);} }public class AnimalInvocationHandler implements InvocationHandler {private Object target;public AnimalInvocationHandler(Object target) {this.target target;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(吃前加热);Object result method.invoke(target, args);System.out.println(吃后清理);return result;} }public class AnimalProxy {public static Animal createProxy(Animal animal) {return (Animal) Proxy.newProxyInstance(animal.getClass().getClassLoader(),animal.getClass().getInterfaces(),new AnimalInvocationHandler(animal));} }public class Main {public static void main(String[] args) {Dog dog new Dog();Animal dogProxy AnimalProxy.createProxy(dog);dogProxy.eat();} }JDK 动态代理有一个最致命的问题是其只能代理实现了接口的类。 为了解决这个问题我们可以用 CGLIB 动态代理机制来避免。 CGLIB代理 CGLIB代理也叫作子类代理它使目标对象不需要实现接口是在内存中构建一个子类对象从而实现对目标对象功能扩展有的也将CGLIB代理归属到动态代理。 CGLIB是一个高性能的代码生成包它可以在运行期扩展java类与实现java接口。被许多AOP的框架使用如Spring AOP。Cglib包的底层是通过使用字节码处理框架ASM来转换字节码并生成新的类。 优点可以为没有实现接口的类提供代理性能比动态代理更高缺点生成的代理类较大、不支持final方法和类、对于final类和方法的处理相对复杂。 public class Dog {public void eat() {System.out.println(吃吃吃);} }public class AnimalMethodInterceptor implements MethodInterceptor {Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println(吃前加热);Object result methodProxy.invokeSuper(o, objects);System.out.println(吃后清理);return result;} }public class DogCglibProxy {public static Dog createProxy() {Enhancer enhancer new Enhancer();enhancer.setSuperclass(Dog.class);enhancer.setCallback(new AnimalMethodInterceptor());return (Dog) enhancer.create();} }public class Main {public static void main(String[] args) {Dog dogProxy DogCglibProxy.createProxy();dogProxy.eat();} }CGLIB与java动态代理的区别 实现方式: Java动态代理使用java.lang.reflect.Proxy和InvocationHandler接口。Java动态代理只能为接口创建代理对象它是基于接口的代理。通过Proxy.newProxyInstance()方法可以动态地生成实现了指定接口的代理类。CGLIB通过继承目标类的方式创建代理对象。CGLIB可以为类创建代理而不仅仅是接口。它通过生成目标类的子类在子类中增加代理逻辑来实现动态代理。 代理对象类型: Java动态代理只能代理实现了接口的类。它要求目标对象实现一个或多个接口然后通过代理对象来实现这些接口。CGLIB可以代理没有实现任何接口的类。它通过继承目标类来创建代理对象因此目标类不需要实现任何接口。 性能: Java动态代理由于生成的代理对象是基于接口的因此在调用代理方法时会通过接口的方法调用InvocationHandler的invoke方法再由invoke方法调用实际的目标方法。这一层额外的调用可能会引入一些性能开销。CGLIB生成的代理对象是目标类的子类因此调用代理方法时直接调用子类中的方法避免了通过接口的中间层可能会在一些情况下具有更好的性能。 构造方式: Java动态代理通过Proxy.newProxyInstance()方法动态生成代理对象需要提供一个实现InvocationHandler接口的对象。CGLIB通过CGLIB库动态生成代理对象无需提供InvocationHandler。CGLIB通过继承目标类并重写其中的方法来实现代理逻辑。 应用场景 代理模式可以在多种场景下使用包括但不限于以下几个方面 访问控制代理模式可以用来控制对实际对象的访问权限。比如只有特定用户或角色才能访问某些敏感数据。远程访问代理模式可以用来处理远程对象的访问。比如通过代理对象来访问远程Web服务。延迟加载代理模式可以用来实现延迟加载。比如通过代理对象来加载某些资源或数据以避免在程序启动时就加载所有数据。虚拟代理当需要延迟加载或预加载大量数据时可以使用虚拟代理来提高程序的性能和效率。 应用场景 代理模式可以在多种场景下使用包括但不限于以下几个方面 访问控制代理模式可以用来控制对实际对象的访问权限。比如只有特定用户或角色才能访问某些敏感数据。远程访问代理模式可以用来处理远程对象的访问。比如通过代理对象来访问远程Web服务。延迟加载代理模式可以用来实现延迟加载。比如通过代理对象来加载某些资源或数据以避免在程序启动时就加载所有数据。虚拟代理当需要延迟加载或预加载大量数据时可以使用虚拟代理来提高程序的性能和效率。缓存代理当需要对经常使用的数据进行缓存时可以使用缓存代理来管理和优化数据的访问效率。
http://www.yutouwan.com/news/311557/

相关文章:

  • 北京网站建设华大浙江短视频seo优化网站
  • 建湖网站优化公司上海黄页企业名录电话
  • 做网站公司合同建设银行淮安招聘网站
  • 自己如何做家政网站做网站为何要续费
  • 优秀网络广告案例分析wordpress优化检测
  • 石家庄信息门户网站定制费用跨平台 移动网站开发
  • 国内买机票最便宜网站建设本地访问wordpress
  • 网站网站建设的原则有哪些旅游公网站如何做
  • 东道设计公司待遇如何百度推广seo是什么意思
  • 做预算的网站域名最新通知
  • 给房地产公司做网站的公司网站建设中长出现的问题
  • 平台网站怎么做的好大学生html网页设计作业
  • 17网一起做网站友情链接交换系统
  • 安阳市建设工程领域网站Asp.net 手机网站制作
  • 干果坚果网站建设南宁百度seo推广
  • wordpress后台编辑主题时提示:抱歉_该文件无法被编辑软件优化
  • 励志故事网站源码电子商务网站建设影响因素
  • 郑州浩方网站建设智联招聘简易制作网站
  • 网站搜索功能怎么做如何查注册商标是别人注册过的
  • 极速彩票网站建设阿图什网站
  • 网站模板psd大兴网站建设多少钱
  • 西乡网站的建设福田我要做网站优化比较好
  • seo专员是什么意思上海网站seo优化
  • 网站建设需要购买服务器么网站建设用什么系统
  • 5星做号宿水软件的网站长沙第三方网站建设公司
  • 洛阳网站建设 恒凯科技判断网站cms
  • jsp做门户网站网站如何申请微信支付接口
  • 徐汇区网站建设公司分析一个网页设计
  • 做网站要开发嘛创新型的网站建设
  • asp 手机网站互联网公司上海