起因是我在用spring-data-elasticsearch的时候,发现部分接口设计的让人看起来特别不爽。如下图所示:

突然想起来Mybatis-plus也有类似的设计,我就奇了怪了,这到底有啥好。findByAuthorsName谁能想到经过AOP + 正则表达式匹配方法名字符串最后对authors.name字段进行查询。

这个正则表达式:^(find|read|get|query|search|stream|count|exists|delete|remove)((\p{Lu}.*?))??By
这难道就是所谓的”封装“,”优雅“。虽然这东西没有让我踩坑,但是这样的接口真的是好的设计嘛?难道我学了假的设计模式,代码整洁之道。
我想知道到底为什么spring的东西会变得这么脑残,是人性的扭曲还是道德的沦丧。在好奇+愤怒驱使下把代码扒开看。
先从doGetBean开始,

spring的骚操作,在afterPropertiesSet接口钩子里面初始化AOP相关的东西。
AOP相关的实现在 class QueryExecutorMethodInterceptor implements MethodInterceptor {这个类。

顺便还复习了下Factory bean。
貌似这是常规操作了,Factory bean + AOP的组合技能,返回一个AOP过的对象。
呜呜呜,接下来再研究AOP的东西。
TODO