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

企业建设网站找网站公司吗企业官方网站制作推广软件

企业建设网站找网站公司吗,企业官方网站制作推广软件,南昌网站专业制作,18款未成年禁止下载的app一、静态代理 定义: 代理类与被代理类在编译期就已确定,代理类需要手动编写并实现与被代理类相同的接口 1.核心角色: Subject(抽象主题):定义业务方法的接口 RealSubject(真实主题&#xff…

一、静态代理

定义

代理类与被代理类在编译期就已确定,代理类需要手动编写并实现与被代理类相同的接口

1.核心角色

  1. Subject(抽象主题):定义业务方法的接口

  2. RealSubject(真实主题):实现接口的具体业务类

  3. Proxy(代理类):实现相同接口,持有真实主题的引用

2.为什么需要静态代理?

        在已经完成的代码中,我们需要对完成的业务进行增强。这时我们又不想改动代码,已经写好的业务代码所以这是我们需要静态代理。

3.代码:

package 静态代理;public interface UserService {public void FindName();
}

package 静态代理;public class UserServiceimpl implements UserService {@Overridepublic void FindName() {System.out.println("正在查找请稍等");}}

package 静态代理;public class Proxyclass implements UserService {private UserServiceimpl userserviceimpl=new UserServiceimpl();@Overridepublic void FindName() {System.out.println("支付完成");userserviceimpl.FindName();}}

package 静态代理;public class TestApp {public static void main(String[] args) {UserService userServie1=new UserServiceimpl();userServie1.FindName();System.out.println("*************************************");UserService userServie2=new Proxyclass();userServie2.FindName();}}

 4.执行流程图

 5.运行结果:

 

二、动态代理

在面向对象开发中,动态代理是一种强大的技术手段,它允许我们在运行时动态创建代理对象,实现对目标方法的增强和拦截。与静态代理相比,动态代理具有以下显著优势:

  1. 代码解耦:将核心业务逻辑与横切关注点(如日志、事务、权限控制)分离

  2. 灵活扩展:无需为每个目标类编写代理类,减少重复代码

  3. 运行时决策:代理逻辑可以根据运行时条件动态调整

1. 核心组件

  • java.lang.reflect.Proxy:负责生成代理类

  • java.lang.reflect.InvocationHandler:方法调用处理器接口

        

2. 实现步骤图解

[客户端] -> [代理对象] -> [InvocationHandler] -> [目标对象]

3. 代码实现解析

package jdk动态代理;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class UserServiceimpl_Proxy_Dynamic implements InvocationHandler {private Object object;public Object get (Object o ) {this.object=o;return Proxy.newProxyInstance(this.object.getClass().getClassLoader(), this.object.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {////对象proxy一般用不到,method是被代理对象的方法,args参数System.out.println("动态代理增强了方法");return method.invoke(this.object, args);//前面是外界获取的方法,args参数}
}
package 静态代理;import jdk动态代理.UserServiceimpl_Proxy_Dynamic;public class TestApp {public static void main(String[] args) {UserService userServie1=new UserServiceimpl();userServie1.FindName();System.out.println("*************************************");UserService userServie2=new Proxyclass();userServie2.FindName();System.out.println("下面是动态代理方法*****************************");UserServiceimpl_Proxy_Dynamic userServiceimpl_proxy_dynamic=new UserServiceimpl_Proxy_Dynamic();UserService userService=(UserService) userServiceimpl_proxy_dynamic.get(userServie1);userService.FindName();}}

4. 关键参数说明

参数作用说明
ClassLoader定义代理类的加载器,通常使用目标类的类加载器
Class<?>[] interfaces代理类要实现的接口列表,决定代理对象支持哪些方法
InvocationHandler方法调用处理器,所有代理方法调用都会路由到该接口的invoke方法

  5.运行结果:

6.代理方案对比 

特性静态代理JDK动态代理CGLIB代理
实现方式手动编写代理类接口代理子类继承
编译期处理需要不需要不需要
执行效率中等(反射调用)较高(ASM生成字节码)
目标类要求无特殊要求必须实现接口不能是final类
方法拦截范围显式实现的接口方法接口方法所有非final方法

7.实践建议 

  1. 优先选择JDK动态代理:当目标类已实现接口时

  2. 合理使用缓存:对重复创建的代理对象进行缓存

  3. 异常处理:在invoke方法中妥善处理异常

  4. 组合使用:结合模板方法模式实现通用代理逻辑

  5. 性能监控:在关键路径上记录代理耗时

http://www.dtcms.com/a/443313.html

相关文章:

  • 建设网站实验活动小结青海建设网站价格低
  • 力扣hot100做题整理(21-30)
  • 建设网站招聘织梦网站档目管理空白
  • 进口网站建设简述jsp网站开发的环境配置过程
  • 2015年做那些网站致富广州网站制作开发公司
  • 有域名了怎么建立网站杭州市网站seo
  • 题解:P14041 [PAIO 2025] Towers
  • 城乡建设学校官方网站wordpress定时失败
  • 许昌长葛网站建设制作设计做外汇上什么网站看新闻
  • 案例学网页设计和网站建设网站建设百度不通过
  • 有哪些做外贸网站ps怎样做网站首页图
  • 网站建设论文设计网站开发软件成本
  • 丽水网站建设哪家好专业团队建设方案
  • 连云港做网站制作型云网站建设
  • 【Docker-Day 38】Kubernetes 核心调度:深入解析资源请求 (Requests) 与限制 (Limits) 的奥秘
  • 2328. 网格图中递增路径的数目 2001 关于灵神解法的消化
  • 网站数据库有哪些中企动力官网 网站
  • 正则表达式入门与进阶(优化版)
  • 服装销售网站建设策划书wordpress time()
  • 1.7 巴特沃斯滤波器
  • 在线做试卷网站网页设计作业代做
  • 个人网站免费的吗网站开发的体会
  • 做安防在哪个网站做广告呢保网微商城官网登录
  • 中国建设银行网站如何注册品牌网站建设 蝌蚪小7
  • 重庆专业做淘宝网站百度h5怎么发布
  • 厦门网站设计排行兰州网络推广徽hyhyk1
  • 用Python升级贾维斯:添加人脸识别功能,实现“刷脸”控制电脑/设备
  • 为什么java中不使用多叉树
  • 没人做网站了吗网站模块功能
  • 10.2 容器云部署准备(二)