回调之初体验

前阵子在Spring接触到了回调的方法时,对回调甚是不解,也记得以前在swing好象也有,查了相关资料,觉得大多表述的比较乱,还是不太明白。

这几日在做SSH整合的小项目时,发现一个多对多双向关联,在做插入时,平空多出两条update语句,以为是spring事务管理的原因。于是把Spring的传播事物等属性配置资料拿出来看,也是很乱,用了太多不用的类作铺垫,后来大概可以用来配置不出错了,也就不管它了,反正这个东西是固定的,也就是用到动态代理机制,到时候用什么看一下就知道了。

做多对多双向关联的几张表分别是Users,Interest,UserInterest;在做插入操作时,只需插入Users和UserInfterest就可以了,Interest信息只是用来读取的。但是每次插入时发现都会对Interest做额外的更新,虽然更新后的内容不会变,但是在这性能上是一种损失,虽然这种损失是可以忽略不计的,但是毕竟在某些方面来说相对不是最优的,加上这和我以前对双向多对多关联理解产生了冲突。

于是折腾了几天,绕了很弯,白费了很多力气,后来发现是因为这个Interest是托管对象的原因,不知道别人碰到这个问题是如何解决的,也可能通过Spring的相关的配置可以解决这个问题,也有可能大家都直接把这个忽略了,对于Spring配置很头疼,不想再去看了。于是想到在做Users和Interest关联的时候放在同一个事务里操作,这个问题就解决了。

这只是初步设想,因为前几天接触到反射,所以想用反射的方法,后来我就从DAO类找下去,看在哪里做个反射方法的调用合适,没想到的是,要改的话必需要改HibernateTemplate类,这个是Spring框架提供的相关的类,改不了,所以只能用继承来重写它的方法了,它又被另一个框架的类做引用,继承已经不能解决了,于是那个类也重写一下。除此之外,还有一个问题就是,这个类里面居然有一个CallBack,也就是回调,我读了一下源码。我的经验是,你一定要有一份随时可用的源码,在你遇到问题是它会给你意想不到的帮助。后来终于终于把回调机制弄清楚了。实际上就是在把一个接口的引用传给一个方法,然后方法内部调用接口的一个方法,然后这个接口方法需要实现,一般是写一个类实现这个接口,实例化后把它的引用当作参数传入就可以了,区别就是你在用到这个方法时,在需要传入参数的地方实现这个接口和接口的方法,只不过语法有点奇怪。

我在做了相关的改动之后,把数据库的相关表的历史数据清空,惴惴不安的开始运行它,我对运行成功报有很大的期望,当然也做好了接受报错信息的准备。意外的是,这次它待我不薄,居然没有报错,这是成功的一半,于是我再去看控制台的打印语句,update语句居然神奇般的消失了,当下大悦,特分享之:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值