浅析“代理模式”实现spring事务管理
模拟用户调用:
RealSubject 的代码:
--------------------------------
DynamicSubject 中我们可以模拟数据库操作;实现事务管理;
初级开发者会犯一个错误:直接从SPRING中配置的DATASOURCE中取得CONNECT数据库连接,这样会导致事务失效;
因为你取得的连接的AUTOCOMMIT 是TRUE ;这样事务就没法交给SPRING进行管理啦。
用代理的作用其实就是控制CONNECT数据库连接,通过代理我们可以控制数据库操作的提交和回滚;
另外早期的SPRING事务管理必须是基于接口的,当现在改变啦!为啥必须基于接口?看看这段代码:
Proxy根据InvocationHandler接口的实现类中的内容生成最后供用户调用的Subject接口 ,
newProxyInstance 中有个参数必须是接口的集合,这个就是原因//生成RealSubject 的代理类 Subject subject = (Subject) Proxy.newProxyInstance(rsClassLoader,rsInterfaces, ds);