CGLIB动态代理通过字节码生成实现类的代理,支持非final类,性能优于JDK代理。但在安全审计中存在内存马注入和反序列化利用等风险,需要通过白名单和方法过滤等措施进行防护。
比较了Java动态代理和CGLIB的功能、优势和用例。Java动态代理适用于基于接口的代理,CGLIB适用于代理类。Java动态代理在内存使用方面更节省,CGLIB在性能方面更高。选择代理方式取决于具体需求,如是否需要代理非接口类和性能要求。
最近完成了一个新系统的开发,对核心接口进行了压力测试,发现核心接口的QPS只有200左右,CPU却飙升到了100%。经过定位发现,是由于Finalizer线程频繁执行垃圾回收导致CPU资源被抢占。解决方案包括不使用CGLIB创建动态代理,手动创建静态代理类,以及尽量减少临时对象的产生。
虽然日常工作中经常使用aop做一些业务功能的开发,但是如果让我解释"面向切面"这四个字的意思,我还是会"十脸懵逼",哈哈。那么今天的文章,作为字节码增强技术系列承上启下的第二篇,就让我们以aop为马,去追逐字节码的星光。
完成下面两步后,将自动完成登录并继续当前操作。