DLX Dev Everything Engineer

有了AOP就能为所欲为了嘛

2020-06-09

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

1591718403444

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

1591718714468

这个正则表达式:^(find|read|get|query|search|stream|count|exists|delete|remove)((\p{Lu}.*?))??By

这难道就是所谓的”封装“,”优雅“。虽然这东西没有让我踩坑,但是这样的接口真的是好的设计嘛?难道我学了假的设计模式,代码整洁之道。

我想知道到底为什么spring的东西会变得这么脑残,是人性的扭曲还是道德的沦丧。在好奇+愤怒驱使下把代码扒开看。

先从doGetBean开始,

1591719168810

spring的骚操作,在afterPropertiesSet接口钩子里面初始化AOP相关的东西。

AOP相关的实现在 class QueryExecutorMethodInterceptor implements MethodInterceptor {这个类。

1591720710528

顺便还复习了下Factory bean。

貌似这是常规操作了,Factory bean + AOP的组合技能,返回一个AOP过的对象。

呜呜呜,接下来再研究AOP的东西。

TODO


Similar Posts

Comments