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

湛江网站建设技术托管网站开发需求分析报告

湛江网站建设技术托管,网站开发需求分析报告,WordPress大前端top,wordpress群目录 1、使用场景 2、静态代理 3、动态代理 JDK动态代理 CGlib 动态代理实现 1、使用场景 使用代理模式主要有两个目的#xff1a;一是保护目标对象#xff0c;二是增强目标对象。 2、静态代理 NO.1 抽象接口#xff1a;定义视频播放器接口Player public interface P…目录 1、使用场景 2、静态代理 3、动态代理 JDK动态代理 CGlib 动态代理实现 1、使用场景 使用代理模式主要有两个目的一是保护目标对象二是增强目标对象。 2、静态代理 NO.1 抽象接口定义视频播放器接口Player public interface Player {void loadVideo(String filename);void playVideo(String filename); }NO.2 真实类定义接口实现类VPlayer public class VPlayer implements Player {Overridepublic void loadVideo(String filename) {System.out.println(加载MP4视频文件filename);}Overridepublic void playVideo(String filename) {System.out.println(播放MP4视频filename);} }NO.3 代理类定义代理类VPlayerProxy实现同样的接口并且引入目标对象 public class VPlayerProxy implements Player {private Player player;public VPlayerProxy(Player player) {this.player player;}Overridepublic void loadVideo(String filename) {player.loadVideo(filename);}Overridepublic void playVideo(String filename) {player.playVideo(filename);} }NO.4 客户端调用 public class Client1 {public static void main(String[] args) {//直连方式Player vplaynew VPlayer();vplay.playVideo(aaa.mp4);System.out.println();//代理方式Player proxynew VPlayerProxy(vplay);proxy.loadVideo(aaa.mp4);proxy.playVideo(aaa.mp4);} }3、动态代理 JDK动态代理 JDK动态代理是基于接口实现的代理只能代理实现了接口的类。 在运行时动态生成一个代理对象同时还可以在方法调用前后执行额外的增强处理。JDK动态代理通过反射机制实现代理功能其原理分为以下几个步骤 1、创建实现InvocationHandler接口的代理类工厂在调用Proxy类的静态方法newProxyInstance时会动态生成一个代理类。 2、在代理对象的方法被调用时JVM会自动调用代理类的invoke方法。在invoke方法中可以根据需要执行各种逻辑比如添加日志、性能统计、事务管理等。 3、invoke方法调用在invoke方法中通过反射机制调用目标对象的方法并返回方法的返回值。在调用目标对象的方法前后可以执行额外的逻辑。 通用实现代码 public class JDKProxyFactory implements InvocationHandler {//需要被代理的对象private Object object;public JDKProxyFactory(Object object) {this.object object;}SuppressWarnings(unchecked)public T T getProxy(){return (T) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),//当前线程的上下文ClassLoaderobject.getClass().getInterfaces(), //代理需要实现的接口this); // 处理器自身}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result null;//进行方法匹配调用对应方法名的方法if (loadVideo.equals(method.getName())) {resultmethod.invoke(object, args);}if (playVideo.equals(method.getName())) {System.out.println(前置增强);resultmethod.invoke(object, args);System.out.println(后置增强);}return result;} }客户端调用 public class Client2 {public static void main(String[] args) {Player playernew VPlayer();Player proxynew JDKProxyFactory(player).getProxy();proxy.loadVideo(aaa.mp4);proxy.playVideo(aaa.mp4);/* 或者Player pnew VPlayer();Player o (Player) Proxy.newProxyInstance(p.getClass().getClassLoader(),p.getClass().getInterfaces(),new VPlayerProxyFactory(p));o.loadVideo(aaaa.mp4); */} }CGlib 动态代理实现 CGlib方式是基于继承实现的代理它不是指真实类需要继承某个父类而是生成的代理类作为真实类的子类去代理父类即代理类继承自真实类。这种方式不需实现接口可以作为JDK代理方式的补充方案。 CGLIBCode Generation Library可以在运行时动态生成目标类的子类作为代理类并覆盖其中的方法来实现代理功能。与Java自带的JDK动态代理不同CGlib动态代理可以代理没有实现接口的类。其原理分为以下几个步骤 1、创建Enhancer对象Enhancer是CGLIB库中用于动态生成子类的主要类。通过创建Enhancer对象并设置需要代理的目标类、拦截器等参数可以生成一个代理类。 2、调用代理对象通过调用代理对象的方法会触发拦截器的intercept方法。在intercept方法中可以根据需要执行各种逻辑比如添加日志、性能统计、事务管理等。 单独定义一个没有接口的真实类APlayer //音频播放器 public class APlayer {public void loadAudio(String filename) {System.out.println(加载MP3音频文件filename);}public void playAudio(String filename) {System.out.println(播放MP3filename);} }通用实现代码 public class CglibProxyFactory implements MethodInterceptor {SuppressWarnings(unchecked)public T T getProxy(ClassT clazz) {Enhancer en new Enhancer();//设置代理的父类en.setSuperclass(clazz);//设置方法回调en.setCallback(this);//创建代理实例return (T)en.create();}Override//参数中的object是目标对象method和args是目标对象的方法和参数methodProxy是方法代理public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {Object result null;if (loadAudio.equals(method.getName())) {//通过继承的方法实现代理因此这里调用invokeSuperresult methodProxy.invokeSuper(object, args);}if (playAudio.equals(method.getName())) {result methodProxy.invokeSuper(object, args);}return result;} }客户端调用 public class Client3 {public static void main(String[] args) {APlayer aplayernew APlayer();APlayer proxy new CglibProxyFactory().getProxy(aplayer.getClass());//验证代理类的父类System.out.println(代理类的父类proxy.getClass().getSuperclass().getSimpleName());System.out.println();proxy.loadAudio(荷塘月色.mp3);proxy.playAudio(荷塘月色.mp3);} }
http://www.pierceye.com/news/2919/

相关文章:

  • php做网站框架钉钉爱客crm
  • 租凭境外服务器做违规网站医院风格 wordpress
  • 三里河网站建设公司两颗米网站建设
  • 英文旅游网站建设唯品会 只做特卖的网站
  • 门户网站是指提供什么的网站上海突发新闻
  • 企业做网站域名需要自己申请吗小程序代理需要
  • 网站 app微信三合一撤销网站备案
  • 网站主页尺寸华为怎么设置安全网站
  • 山东省建设节能协会网站宠物网站开发文档
  • 四川住房和建设厅网站有用的网站地址
  • 如何查到网站建设路由 拦截 网站开发
  • 建设常规的网站报价是多少钱个人网站备案与企业备案
  • 湖北响应式网站制作营销型网站北京
  • 哪个网站做相片书好电子商务的网站开发
  • 昆明网站seo诊断包头索易网站建设
  • seo蒙牛伊利企业网站专业性诊断南京百度推广优化排名
  • 邯郸哪儿能做网站遵义网站制作和推广
  • 单页网站设计欣赏教育网站建设策划书
  • 百度站点做自媒体的网站有哪些
  • 做计算机网站网站三大要素是什么意思
  • 一加官方网站进入mvc5做博客网站
  • 那些网站被k恢复是怎么做的wordpress 主题 最简单
  • 爱网站关键词查询费用网站建设
  • 做网站抬头wordpress wiki主题
  • 成都手机网站建设哪家公司好网页设计素材网站花
  • 大学国际化网站建设app是怎么制作的
  • 做推广网站dw学校网站制作教程
  • 做早餐的网站怎样建立网站的快捷方式
  • 郑州网站外包邢台网站建设服务周到
  • 在线建设房屋设计网站无锡响应式网站设计