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

宁波建网站报价客户制作网站时的问题

宁波建网站报价,客户制作网站时的问题,怎样提高网站点击率,北京营销公司排行榜代理模式 描述基本使用使用 动态代理基于JDK的动态代理 描述 说到代理模式,Spring AOP 就是一种基于动态代理的实现。 基于原有方法进行功能增强的一种模式。 基本使用 定义原有业务接口 public interface IService {void action(); }定义原有业务类 public cl…

代理模式

  • 描述
    • 基本使用
    • 使用
  • 动态代理
    • 基于JDK的动态代理

描述

说到代理模式,Spring AOP 就是一种基于动态代理的实现。
基于原有方法进行功能增强的一种模式。

基本使用

  • 定义原有业务接口
public interface IService {void action();
}
  • 定义原有业务类
public class DefaultService implements IService{@Overridepublic void action() {System.out.println("action.....");}
}
  • 定义代理类(直接在代理类中增强)
public class ProxyService implements IService{private IService service;public ProxyService() {this.service = new DefaultService();}@Overridepublic void action() {this.actionBefore();service.action();}private void actionBefore() {System.out.println("actionBefore...");}
}
  • 基于已有的增强接口增强(接口的本质就是能力,如果一个类要使用一个能力,则实现这个接口即可
public interface IProxy {void ens();
}
public class EnsProxyService implements IService, IProxy {private IService service;public EnsProxyService() {this.service = new DefaultService();}@Overridepublic void action() {this.ens();service.action();}@Overridepublic void ens() {System.out.println("ens...");}
}

使用

public class Sample {public static void main(String[] args) {IService service = new ProxyService();service.action();}
}

动态代理

所谓动态代理,不必在编码阶段把代理类生成出来,而是代码运行时,动态创建的代理对象。

基于JDK的动态代理

基于JDK的动态代理,需要代理的类必须声明接口。

  • 声明接口
public interface IBizService {void biz();
}
  • 声明实现类
public class DefaultBizService implements IBizService{@Overridepublic void biz() {System.out.println("biz....");}
}
  • 基于JDK动态代理接口声明代理规则
public class BizInvocationHandler implements InvocationHandler {private Object obj;// 传入要代理的对象public BizInvocationHandler(Object obj) {this.obj = obj;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("invoke before...");Object result = method.invoke(obj, args);System.out.println("invoke after...");return result;}
}
  • 使用
public class Sample {public static void main(String[] args) {IBizService bizService = new DefaultBizService();IBizService proxyInstance = (IBizService) Proxy.newProxyInstance(bizService.getClass().getClassLoader(), bizService.getClass().getInterfaces(), new BizInvocationHandler(bizService));proxyInstance.biz();}
}
  • 创建代理对象的过程实际还能封装(具有业务含义的封装需与对应的BizInvocationHandler绑定)
  • 声明通用接口
public interface IdyProxy<T> {T getProxy(T obj);
}
  • 声明绑定handler的具体接口
public class BizDyProxy<T> implements IdyProxy<T> {@Overridepublic T getProxy(T obj) {T proxyInstance = (T) Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new BizInvocationHandler(obj));return proxyInstance;}
}
  • 使用
public class Sample {public static void main(String[] args) {IBizService bizService = new DefaultBizService();
//        IBizService proxyInstance = (IBizService) Proxy.newProxyInstance(bizService.getClass().getClassLoader(), bizService.getClass().getInterfaces(), new BizInvocationHandler(bizService));
//        proxyInstance.biz();BizDyProxy<IBizService> dyProxy = new BizDyProxy<>();IBizService proxy = dyProxy.getProxy(bizService);proxy.biz();}
}
http://www.dtcms.com/a/605062.html

相关文章:

  • 【杂记】Microchip 的通用集成开发环境工具对照表(MPLAB X IDE)和芯片家族对标表(Microchip VS ST)
  • 使用C#代码在 Word 文档中查找并替换文本
  • Mac C语言编译器 | 如何选择适合的工具来提升开发效率
  • 【JAVA 进阶】Spring Boot 自动配置原理与自定义 Starter 实战
  • LeetCode 1658 | 将 x 减到 0 的最小操作数(C语言滑动窗口解法)
  • 《Effective Java》解读第12条:始终要覆盖toString
  • Linux C语言编译器 | C语言开发的最佳实践与工具选择
  • 网站备案电话没接产品设计分析案例
  • 112、23种设计模式之命令模式(20/23)
  • 第6章:空间查询与地理处理
  • 使用 Docker Compose 一键更新:深入理解 docker-compose pull 的适用场景
  • 一次在VS2022中使用sqlite数据库故障排查过程
  • Mailjet Setup Pitfall Guide: SPF, DKIM, DMARC Deliverability
  • 最好的企业网站电子商务网站建设考试重点
  • 大学新校区建设网站北京seo方法
  • SPI学习(QA)
  • 怎么用数据仓库来进行数据治理?
  • Linux_6:FTP云盘项目
  • Spring Boot spring.factories文件详细说明
  • 网站seo文章免费asp地方门户网站系统
  • 《信息存储与管理》逻辑串讲
  • dify TTS部署 GPT-SoVITS
  • kotlin中SharedFlow的简单使用
  • Kotlin 中的 inline 和 reified 关键字
  • 开封府景点网站及移动端建设情况精品资源共享课网站建设 碧辉腾乐
  • 战场目标检测:Faster R-CNN与RegNetX-800MF融合实现建筑物人员坦克车辆识别_2
  • 易语言黑月编译器:提升编程效率与性能优化 | 深入解析易语言开发中的工具应用与技巧
  • Vibe Coding - 从Vibe Coding到Spec Coding_AI编码范式的进化之路
  • 宣化网站建设青岛网站制作推广平台
  • 【多模态大模型面经】 BERT 专题面经