请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在mybatis拦截器的一个建议

老师在DynamicDataSourceInterceptor这个类中的

https://img1.sycdn.imooc.com//szimg/5b1523d70001de1204700169.jpg

这个plugin方法中的if判断是完全没有必要的。这过度设计了。

原因是因为在你写DynamicDataSourceInterceptor类上的注解时,已经表明了type为Executor.class。所以在老师您调Plugin.wrap(target, this)的时候,这个Plugin底层已经帮我们筛出了不是type类型的其他对象,只会拦截我们在注解中声明的type类,也就是这里的Executor.class

https://img1.sycdn.imooc.com//szimg/5b1523d8000119e210610092.jpg


正在回答

3回答

同学好,同学有没有考虑到别的情况,因为plugin是public的,第三方调用了plugin方法,传入了一个不是实现Executor接口的Object? :)

0 回复 有任何疑惑可以回复我~
  • 提问者 丶远走高飞 #1
    我就是想说这个 因为我觉得老师肯定是考虑到这个情况才做的
    但是这个老师你不必担心啊
    因为在Plugin.wrap这个方法底层,做了这个的判断!并且如果传入的object不是实现Executor接口的话,它的底层是不会new出proxy代理对象的。
    我今天刚好再看mybatis源码!
    回复 有任何疑惑可以回复我~ 2018-06-04 23:07:17
  • 提问者 丶远走高飞 #2
    因为你传入了当前的Interceptor作为参数,这个Interceptor上你的注解中就有 type 就有你想拦截的是哪一类! 所以它底层拿到这个 就会在其他调用这个plugin方法时判断! 传入的这个obeject是否是这个type
    回复 有任何疑惑可以回复我~ 2018-06-04 23:09:06
  • 翔仔 回复 提问者 丶远走高飞 #3
    仔细看了下源码,当时确实是凭经验加了这个判断,这个确实可以去掉了,源码就能证明:) 感谢同学的细心,平时我们研究这类源码也就是重点看的某个模块,这块确实没仔细去调研,赞同学的细心
    回复 有任何疑惑可以回复我~ 2018-06-04 23:16:11
提问者 丶远走高飞 2018-06-04 23:11:53

https://img1.sycdn.imooc.com//szimg/5b15569c00017fb307390245.jpg

老师可以看这个 wrap方法的源码。

0 回复 有任何疑惑可以回复我~
创通一哥 2018-06-04 20:51:01

估计是老师当时漏掉了注解,所以在plugin方法里面做了判断。

0 回复 有任何疑惑可以回复我~
  • 提问者 丶远走高飞 #1
    mybatis拦截器 必须使用后注解。没有注解使用不了的
    回复 有任何疑惑可以回复我~ 2018-06-04 20:58:28
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号