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

制作网站平台做食品网站用什么颜色

制作网站平台,做食品网站用什么颜色,淮南网络营销哪家强,天津seo诊断技术在 Java 中,动态代理是一种通过反射机制在运行时动态生成代理对象的技术,它能够在不修改原有代码的基础上增强目标对象的功能。以下是关于动态代理的详细说明: 一、静态代理 vs 动态代理 1. 静态代理 定义:手动编写代理类&#x…

在 Java 中,动态代理是一种通过反射机制在运行时动态生成代理对象的技术,它能够在不修改原有代码的基础上增强目标对象的功能。以下是关于动态代理的详细说明:


一、静态代理 vs 动态代理

1. 静态代理
  • 定义:手动编写代理类,代理类需要实现与目标类相同的接口,并在方法中调用目标对象的方法。

  • 缺点

    • 每个目标类需要一个对应的代理类,代码冗余。
    • 接口或目标类变更时,代理类需要同步修改。
  • 示例

    interface UserService {void save();
    }class UserServiceImpl implements UserService {public void save() { System.out.println("保存用户"); }
    }// 静态代理类
    class UserServiceProxy implements UserService {private UserService target;public UserServiceProxy(UserService target) { this.target = target; }public void save() {System.out.println("前置操作");target.save();System.out.println("后置操作");}
    }
    
2. 动态代理
  • 定义:在运行时动态生成代理类,无需手动编写代理类。
  • 优点
    • 一个代理类可以代理多个目标类。
    • 代码复用性高,维护成本低。
  • 核心机制:通过反射(java.lang.reflect.Proxy)或字节码增强(如 CGLIB)生成代理对象。

二、Java 动态代理的实现方式

1. JDK 动态代理(基于接口)
  • 要求:目标对象必须实现至少一个接口。

  • 核心类

    • java.lang.reflect.Proxy:生成代理对象。
    • java.lang.reflect.InvocationHandler:定义代理逻辑。
  • 实现步骤

    1. 定义接口和实现类(目标对象)。
    2. 实现 InvocationHandler 接口,编写增强逻辑。
    3. 通过 Proxy.newProxyInstance() 生成代理对象。
  • 代码示例

    interface UserService { void save(); }class UserServiceImpl implements UserService {public void save() { System.out.println("保存用户"); }
    }class MyInvocationHandler implements InvocationHandler {private Object target;public MyInvocationHandler(Object target) { this.target = target; }public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("前置操作");Object result = method.invoke(target, args); // 反射调用目标方法System.out.println("后置操作");return result;}
    }// 生成代理对象
    UserService proxy = (UserService) Proxy.newProxyInstance(UserService.class.getClassLoader(),new Class[]{UserService.class},new MyInvocationHandler(new UserServiceImpl())
    );
    proxy.save(); // 调用代理方法
    
2. CGLIB 动态代理(基于继承)
  • 要求:目标类不需要实现接口,通过继承目标类生成子类代理。

  • 依赖:需要引入 cglib 库(Spring Core 已内置)。

  • 核心类

    • net.sf.cglib.proxy.Enhancer:生成代理对象。
    • net.sf.cglib.proxy.MethodInterceptor:定义代理逻辑。
  • 代码示例

    java

    复制

    class UserService {public void save() { System.out.println("保存用户"); }
    }class MyMethodInterceptor implements MethodInterceptor {public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println("前置操作");Object result = proxy.invokeSuper(obj, args); // 调用父类方法System.out.println("后置操作");return result;}
    }// 生成代理对象
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(UserService.class);
    enhancer.setCallback(new MyMethodInterceptor());
    UserService proxy = (UserService) enhancer.create();
    proxy.save();
    

三、动态代理的应用场景

  1. AOP 编程:如 Spring AOP 的切面(日志、事务、权限控制)。
  2. RPC 框架:远程方法调用的客户端代理。
  3. 延迟加载:Hibernate 的延迟加载实现。
  4. 单元测试:Mock 对象的动态生成。

四、JDK 动态代理 vs CGLIB 动态代理

特性JDK 动态代理CGLIB 动态代理
依赖目标类必须实现接口无接口要求
生成方式反射生成代理类继承目标类生成子类
性能调用较快,生成较慢生成较快,调用较慢
局限性无法代理未实现接口的类无法代理 final 类/方法
应用框架Spring AOP(默认接口场景)Spring AOP(非接口场景)

五、总结

  • 静态代理适合简单场景,但代码冗余。
  • 动态代理通过反射或字节码技术动态生成代理类,灵活且高效。
  • JDK 动态代理基于接口,CGLIB基于继承,根据需求选择合适方式。

文章转载自:

http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://00000000.ykmkz.cn
http://www.dtcms.com/wzjs/616383.html

相关文章:

  • 网站开发哪里可做私活奖券世界推广网站
  • kocool网站开发网站建设部门管理制度
  • 苏州网站托管qq邮箱登录入口网页版
  • 济南做网络安全的公司广州seo公司品牌
  • 卡二卡三卡四精品系统优化最好的安卓手机
  • 开网站做女装好还是童装好做商城网站需要备案吗
  • 公司名称变更网站要重新备案网站怎么做显得简洁美观
  • 重庆知名网站高级感ppt模板
  • seo网站优化网站编辑招聘什么软件可以推广自己的产品
  • 好文案网站都市人才网莱芜
  • 设计一个全面了解湖南的网站企业做网络推广有什么好处
  • 凌河锦州网站建设网站的ftp账号和密码是什么
  • 网站后台是怎么更新wordpress 有缓存吗
  • 怎么做期货网站深圳营销网站建设公司
  • 网站建设制作教程标书制作公司
  • 怎么查询建设通网站app和手机网站
  • 对网站建设提建议在线代理网页版 proxy
  • 网站系统模版创意网站
  • 网络运维和网站开发北京官网建设公司
  • 网站标题有图片要怎么做事业单位网站方案
  • 做印刷品的素材网站个人品牌营销策划方案
  • 石家庄网站建设推广wordpress get_query_var
  • 绿茵足球网站建设网站建设及相关流程
  • 购物网站建设成本网络工程师考试内容
  • 创建网站的视频店面设计师哪里找
  • ps设计网站首页界面wordpress数据库怎么添加积分
  • 贝斯特专业网站关键词优化内容
  • 福州商城网站郑州网站推广怎么做
  • 给你一个网站怎么做的吗个人社保缴费基数怎么算
  • 企业外贸网站制作一个静态网页