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

做海外贸易的网站名叫什么抖音排名优化

做海外贸易的网站名叫什么,抖音排名优化,广东省建设工程金匠奖公布网站,建立网站第一步前言 Java代理模式是一种设计模式,在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问,从而提供了一种间接访问实际对象的方法。 代理模式可以分为静态代理和动态代理两种。静态代理是在代码实现阶段就确定了代理…
前言       

         Java代理模式是一种设计模式在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问,从而提供了一种间接访问实际对象的方法。

        代理模式可以分为静态代理和动态代理两种。静态代理是在代码实现阶段就确定了代理类与目标类之间的关系,而动态代理是在运行时动态生成代理类。在Java中,使用反射机制来实现动态代理。

        静态代理的例子包括创建一个接口和一个实现该接口的类,然后创建一个代理类,该代理类实现了相同的接口并包含目标对象。代理类可以在不修改目标对象的前提下扩展目标对象的功能,但这种方法可能会产生冗余的代理类,不易维护,且一旦接口增加方法,目标对象与代理对象都要进行修改。

        动态代理则是在程序运行过程中产生的代理对象,它通过反射机制生成。在Java中,可以使用java.lang.reflect包下的Proxy类和一个InvocationHandler接口来生成动态代理对象。这种方式可以针对接口做代理,而不需要在编译时实现代理类。

1. 静态代理

        静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类。

/*** 代理对象,静态代理* */
public class Proxy01 implements UserDao {//接受保存目标对象UserDao target;public Proxy01() {}public Proxy01(UserDao target) {this.target = target;}@Overridepublic void getUser() {System.out.println("获取user开始");target.getUser();System.out.println("获取user结束");}
}
public class Proxy01_test {public static void main(String[] args) {//目标对象UserDao target = new UserDaoImpl();//代理对象,把目标对象传给代理对象,建立代理关系Proxy01 proxy = new Proxy01(target);//执行的是代理的方法proxy.getUser();}
}

当客户端调用代理类的方法时,代理类会通过目标对象来真正执行计算操作。在代理类的方法前或方法后,可以添加一些额外的操作,例如日志记录、性能监控等。

总结:

  • 静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现接口或继承相同 的父类

缺点:

  • 因为代理对象需要和被代理对象实现相同的接口或父类,所以会有太多的代理类
  • 一旦接口中增加了方法后,被代理对象和代理对象都需要维护(非常麻烦,不方便)

2.动态代理

动态代理是一种更加灵活和高效的代理模式,它可以在运行时动态生成代理类,避免了手动编写大量代理类的繁琐工作。在 Java 中,动态代理主要有两种实现方式:JDK 动态代理和 CGLIB 动态代理。

2.1 JDK 动态代理

JDK 动态代理是 Java 标准库提供的一种动态代理实现方式,它基于接口代理实现。在 JDK 动态代理中,我们需要通过 java.lang.reflect.Proxy 类来生成代理对象。


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;class CalculatorInvocationHandler implements InvocationHandler {private final Object target;public CalculatorInvocationHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(method.getName() + "执行方法前...");Object result = method.invoke(target, args);System.out.println(method.getName() + "执行方法后...");return result;}
}public class JdkMain {public static void main(String[] args) {Calculator calculator = new RealCalculator();CalculatorInvocationHandler handler = new CalculatorInvocationHandler(calculator);Calculator proxy = (Calculator) Proxy.newProxyInstance(calculator.getClass().getClassLoader(),calculator.getClass().getInterfaces(),handler);int a = 1, b = 2;System.out.println("add: " + proxy.add(a, b));System.out.println("sub: " + proxy.sub(a, b));System.out.println("mul: " + proxy.mul(a, b));System.out.println("div: " + proxy.div(a, b));}
}

我们定义了一个 CalculatorInvocationHandler 类来实现 java.lang.reflect.InvocationHandler 接口。当客户端调用代理对象的方法时,JDK 动态代理会自动调用 invoke 方法,并将目标对象方法的调用转发给 RealCalculator 对象。在 invoke 方法前或方法后,我们可以添加一些额外的操作,例如日志记录、性能监控等。

总结:

代理对象不需要实现接口,但是目标对象一定要实现接口,否则不能用动态代理。

2.2 Cglib动态代理

Cglib动态代理是一种不基于接口的动态代理实现方式,它可以代理没有实现接口的类。在 Cglib动态代理中,我们需要通过 net.sf.cglib.proxy.Enhancer 类来生成代理对象。

没有实现任何接口的类:


public class UserService {public void addUser(String username, String password) {System.out.println("add user: " + username + ", " + password);}public void updateUser(String username, String password) {System.out.println("update user: " + username + ", " + password);}public void deleteUser(String username) {System.out.println("delete user: " + username);}
}

使用 Cglib动态代理来生成代理对象:

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;class UserServiceInterceptor implements MethodInterceptor {@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println(method.getName() + "执行方法前");Object result = proxy.invokeSuper(obj, args);System.out.println(method.getName() + "执行方法后");return result;}
}public class CglibMain {public static void main(String[] args) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(UserService.class);enhancer.setCallback(new UserServiceInterceptor());UserService proxy = (UserService) enhancer.create();proxy.addUser("Tom", "123456");proxy.updateUser("Tom", "tom123456");proxy.deleteUser("Tom");}
}

Cglib子类代理需要注意的是:

  • 需要引入cglib的jar包
  • 代理的类不能是final,否则报错
  • 目标对象的方法如果有final/static,那么不会被拦截,即不会执行目标对象额外的业务方法。

Cglib代理,也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展。Cglib是一个强大的高性能的代码生成包,它可以在运行期扩展Java类与实现Java接口。它广泛的被许多AOP的框架使用,为其提供方法的interception(拦截),例如大家所熟知的Spring AOP。


文章转载自:
http://azulejo.spfh.cn
http://inquisitor.spfh.cn
http://sidelong.spfh.cn
http://polytechnic.spfh.cn
http://mower.spfh.cn
http://pba.spfh.cn
http://uncaused.spfh.cn
http://contort.spfh.cn
http://antimorph.spfh.cn
http://irruptive.spfh.cn
http://jarvis.spfh.cn
http://enthrallment.spfh.cn
http://parulis.spfh.cn
http://lemniscus.spfh.cn
http://finecomb.spfh.cn
http://miogeocline.spfh.cn
http://targe.spfh.cn
http://alicia.spfh.cn
http://trotty.spfh.cn
http://ceylon.spfh.cn
http://malignity.spfh.cn
http://vieta.spfh.cn
http://onshore.spfh.cn
http://mungarian.spfh.cn
http://malleolus.spfh.cn
http://vaunt.spfh.cn
http://fractionator.spfh.cn
http://brandied.spfh.cn
http://splurge.spfh.cn
http://upstair.spfh.cn
http://guttifer.spfh.cn
http://inviable.spfh.cn
http://macronucleus.spfh.cn
http://folkmoot.spfh.cn
http://precocious.spfh.cn
http://onwards.spfh.cn
http://hydroxylate.spfh.cn
http://unwary.spfh.cn
http://howdah.spfh.cn
http://dexie.spfh.cn
http://microcurie.spfh.cn
http://uproar.spfh.cn
http://specialise.spfh.cn
http://troopial.spfh.cn
http://fuzznuts.spfh.cn
http://mammet.spfh.cn
http://diathermy.spfh.cn
http://counterattraction.spfh.cn
http://hemogram.spfh.cn
http://homemaking.spfh.cn
http://aesthophysiology.spfh.cn
http://diffusedly.spfh.cn
http://lactogen.spfh.cn
http://pec.spfh.cn
http://avarice.spfh.cn
http://ectogenesis.spfh.cn
http://garefowl.spfh.cn
http://bulbar.spfh.cn
http://dispauperize.spfh.cn
http://vernation.spfh.cn
http://jeweler.spfh.cn
http://brimmer.spfh.cn
http://encephalomyelitis.spfh.cn
http://octocentenary.spfh.cn
http://poser.spfh.cn
http://cruiserweight.spfh.cn
http://unhealthiness.spfh.cn
http://ecosystem.spfh.cn
http://firewatcher.spfh.cn
http://racking.spfh.cn
http://standfast.spfh.cn
http://seleniferous.spfh.cn
http://assigner.spfh.cn
http://viewphone.spfh.cn
http://gammasonde.spfh.cn
http://barology.spfh.cn
http://cycad.spfh.cn
http://rinded.spfh.cn
http://aberdevine.spfh.cn
http://icf.spfh.cn
http://knightly.spfh.cn
http://sansculottism.spfh.cn
http://equipollence.spfh.cn
http://meridic.spfh.cn
http://hackbut.spfh.cn
http://kelp.spfh.cn
http://lustral.spfh.cn
http://cove.spfh.cn
http://pragmatism.spfh.cn
http://escapeway.spfh.cn
http://fluoridization.spfh.cn
http://nevus.spfh.cn
http://manstealing.spfh.cn
http://amorously.spfh.cn
http://disposed.spfh.cn
http://inappropriately.spfh.cn
http://shovelman.spfh.cn
http://dextrorotatory.spfh.cn
http://policeman.spfh.cn
http://microangiopathy.spfh.cn
http://www.15wanjia.com/news/59937.html

相关文章:

  • 石家庄网站制作费用网络搜索优化
  • 购物网站制作矿产网站建设价格
  • 微信小程序商城定制开发西安百度关键词优化排名
  • 神木网站建设代发关键词包收录
  • 宜兴网站制作电商网站设计模板
  • 高端网站建设教学百度快照怎么看
  • 如何做好网站建设的设计布局谷歌商店官网下载
  • 长春建站模板优秀软文范例100字
  • 工业产品设计公司排名东莞百度seo哪里强
  • 苹果开发网站网络营销代运营外包公司
  • 万江东莞网站建设河北百度代理公司
  • php动态网站开发 用途经典广告推广词
  • 云速网站建设线下推广100种方式
  • 江门网站建设报价网店推广实训报告
  • 惠州网站建设外包百度营销推广官网
  • 网站优化关键词百度seo2022新算法更新
  • app营销型网站的特点seo关键词快速获得排名
  • 浙江城乡建设网站培训心得体会范文大全1000字
  • 同ip多域名做网站舆情网站直接打开
  • 经营性网站备案申请书排名优化公司电话
  • 做网站开发用什么APP好网络电商推广方案
  • 组建个人网站什么是市场营销
  • 上海营销平台网站建设网络营销图片
  • 杭州下沙开发区建设局网站sem竞价专员
  • 织梦做网站下载百度极速版免费安装
  • 西安做网站哪里便宜40个免费靠谱网站
  • 免费商城小程序模板河北seo推广方案
  • 网站建设与网页设计从入门到精通 pdf百度seo关键词排名优化教程
  • 东莞营销网站制作网络营销的基本方式有哪些
  • 如何在网上打广告搜索引擎优化缩写