spring9-动态代理
account案例
我们有一个转账方法: 根据名称找到账户,转出账户减钱,转入账户加钱,更新转出账户,更新转入账户,这个方法没有事务的控制,可能出现问题 ## 案例问题 实际上我们需要维护一个和线程绑定的数据库连接,我们做一个工具类,让其支持回滚,于是我们在上诉案例中可以使用trycatch,一旦碰到问题,在catch中回滚即可,这个可以解决问题,但是太复杂了。 # 动态代理 字节码随用随创建,随用随加载,不修改远么的基础上对方法增强, 有两种,基于接口的动态代理和基于类的动态代理 ### 基于接口的动态代理 Proxy.newProxyInstance 参数1 类加载器: 固定写法 是被代理对象的类加载器 参数2 字节码数组: 固定写法 让代理对象和被代理对象有相同的方法 参数3 增强的代码 ,是一个匿名内部类 #### 内部类 实现一个invoke(proxy,method,args); method.invoke(producer,args); 如果被代理的类没有实现任何接口,则此方法无用 ## 动态代理的另一种实现方式 cglib ### 基于子类的动态代理 Enhancer.create(class,callback); 要求类不能是最终类 class是被代理对象的字节码, 第二个参数是MethodInterceptor是一个内部匿名类 ### 动态代理的作用 用动态代理增强connect,让其加回连接池 #