摘要:import java.lang.reflect.Proxy; public class ProxyUtils { public static final String GUICE_PROXY_FLAG = "$EnhancerByGuice$"; public static final Strin
阅读全文
摘要:Jdk: Interface Target & TargetImpl 待代理类 Class TargetImpl-jdkproxy : implements Target { 注入ioc容器 InvocationHandler h { 程序员传入 TargetImpl targetImpl 未注入
阅读全文
摘要:背景: 基类指针指向派生类对象 仍然调用了基类同名方法 基类方法没有mybatis query注解处理名叫entity对象,再一次看出调用的基类的方法 问题: 1 为什么基类的方法也被mybatis代理了 在 jdk动态代理源码底层(jdk生成字节码及5种字节码生产方式比较)中指出,jdk动态代理使
阅读全文
摘要:1 当动态代理遇到ioc (四)真正的cglib 利用切面,将传入参数为特定类型的参数打印 2 因为外部启动项有-D,将所有log的配置重定向,而那些文件又改不了; 因此我借助类加载器隔离朴实案例(二)logback的技术,独有一份配置,我希望切面层的日志单独打入一个文件
阅读全文
摘要:0 当动态代理遇到ioc (二)cglib 中的代理仍然不能切子函数,所以有本篇 1 此前已经解决cglib与asm冲突:当动态代理遇到ioc (三)cglib与asm jar包冲突 2 事务的try catch模型由exception扩叨叨throwable 3 抽象层 由于我们反射调用方法时,不
阅读全文
摘要:1 目的:当动态代理遇到ioc (二)cglib 将事务中控迁移到cglib 2 现象:Exception: java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visi
阅读全文
摘要:接mybatis guice 事务代理切面的代码: package sun.myproxy; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.pr
阅读全文
摘要:1 java 的三种代理模式 (二)——子函数切面 cglib支持非private子函数切面,jdk动态代理不支持 2 java 的三种代理模式 (二)——子函数切面 cglib与jdk对未覆盖Object类的方法,缺省情况下切的不一样 可以被切的隐藏方法(在java object常用方法罗列的方法
阅读全文
摘要:逻辑: natvie test无法搞定db,也不能在unittest环节搞定——引出mockito mockito无法处理injectmock 非public方法的when、verify——引出simple mockito(实际上mockto可以处理protected inner function,
阅读全文
摘要:接java 的三种代理模式 结论: 1 jdk动态代理无法切面子函数,因为jdk动态代理是组合模式,this永远指向被代理origin类的对象,切子函数理论不可行 public class ProxyFactory implements InvocationHandler { //维护一个目标对象
阅读全文
摘要:1 在mybatis Guice 事务源码解析中,可以发现SqlSessionManager中的sqlSessionProxy使用SqlSession构建的代理 private SqlSessionManager(SqlSessionFactory sqlSessionFactory) { this
阅读全文
摘要:接java 的三种代理模式 System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true"); // 目标对象 IUserDao target = new UserDao(); // 给目标对象,创建代理对象 IUser
阅读全文
摘要:背景:当自定义注解遇到spring和类增强 注解的继承有些复杂,应尽量避免使用 当自定义注解遇到spring和类增强 第1点有改写方法遗失注解案例 public class TestMain { public static void main(String []f) { /** * 结论 * 1 g
阅读全文
摘要:在 work log 2020.4.28中,我们使用jdk动态代理处理方法的事务增强 图1 问题的引出 根本原因:动态代理和cglib,会丢掉被代理类成员变量和方法上的注解 起先,我们禁止被增强的类里面使用注解注入依赖,代码会自动审核这种情况 private static final class T
阅读全文
摘要:在前两篇文章中 java 的三种代理模式 jdk动态代理与cglib优势劣势以及jdk动态代理为什么要interface (警惕动态代理导致的Metaspace内存泄漏问题,警惕动态代理导致的Metaspace内存泄漏问题) 讨论了jdk的动态代理 本文从源码级别了解一下,在源代码的基础上,加上 S
阅读全文
摘要:先来看一下jdk动态代理原型: IUserDao target = new UserDao(); // 给目标对象,创建代理对象 IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance(); // 执行方法 【代理对
阅读全文
摘要:1)spring aop与aspectJ AspectJ 本身是不支持运行期织入的(编译时、编译后、加载时,Spring是运行期,https://www.cnblogs.com/silyvin/p/11260965.html是加载时),日常使用时候,我们经常回听说,spring 使用aspectJ实
阅读全文
摘要:1 用spring托管对象调用原生带有自定义注解的方法 GsztbLiveService service = ContextHelper.getBean(GsztbLiveService.class); // service.getClass().getDeclaredMethods(); Meth
阅读全文
摘要:(一)https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247485265&idx=1&sn=0ea1fe4257cb963d24829f69bb6a32da&chksm=ebd6387ddca1b16b87f12f50b24b239bed
阅读全文