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


spring9-动态代理
http://fightinggg.github.io/fluid/Q8BOQ3.html
作者
fightinggg
发布于
2020年4月6日
许可协议