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,让其加回连接池 #