这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

2023-06-05 0 428

晚安呀,我是MD224CH。

上周五正式发布了《我企图透过这首诗说你,T5800源标识符有多牛逼。》这首诗。

该文这种的几段叙述:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

接着有位听众来问我:

是是不是把 JDK 源标识符中的带队标识符给注解掉的?

那个难题的确极好,归属于一个偶而用呵呵能起著良效的源标识符增容基本功。因此我下定决心写个该文来表明呵呵那个难题。

但那个基本功的确十分的单纯,单纯到一句话就能表知道,因此正像副标题说到的“言简意赅,单纯蛮横,但足够多称心”,这首诗也会十分的短。

具体来说,把难题换个TNUMBERAP,难道我能把源标识符注解了,那表明我能修正源标识符。因此,难题就变为了:我是不是去修正 JDK 的源标识符呢?

那个难题有许多个提问,但我这儿的提问很单纯。把源标识符复本这份出,原模原貌的放一份到他们的工程项目中方可。

就像这种:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

接着你在采用的这时候,间接用你 CV 回来的源标识符,要是:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

但我通常采用那个方式的这时候,CV 回来时,会把类中文名称重新命名呵呵,以之界定,其它的啥都不改。

再说无论是不是样吧,这种在你的工程项目里面有这份“源标识符”了,那个“源标识符”和 JDK 里面的源标识符一模一样,这种你就能随便进行修正了。

比如,我在调用 put 方式的这时候,加一点日志输出:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

这种测试用例跑起来的这时候,就能间接输出你添加的内容:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

你都能添加标识符了,注解标识符,甚至是修正标识符逻辑,那还不是手到擒来的事情吗?

对于一些比较复杂的场景,比如异步或者循环等等场景,当你想要在源标识符中加入输出语句方便进行学习和增容的这时候,你就可以用到这招。

这就是我这首诗要教你的两个有关 JDK 源标识符的增容基本功。

整体用处不大,但当你能想到用它的这时候,就是发挥良效的这时候。

难道话题都到这儿了,那么我再给你补充两个有关第三方框架的类似的增容基本功。

还是先举个例子。

比如我在工程项目中采用到了 @Async 注解,接着有两个自定义线程池,发起两个请求之后可以看到的确是采用了我的自定义线程池:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

接着,难题就来了。

假设,我想让 @Async 注解支持 EL 表达式,也就是这种的写法:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

目前,Spring 是不支持这种的配置的,当你这种配置并发起调用,会抛出这种的两个异常:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

它会把 ${thread-pool.name} 认为是两个 Bean,接着 Spring 里面并没有这种的两个 Bean,因此抛出找不到 Bean 的异常。

那么是不是才能让 @Async 注解支持 EL 表达式呢?

我之前写过《舒服,给Spring贡献一波源标识符。》这首诗,里面用的就是那个案例,有兴趣的话可以去看看,我就不展开说了。

在该文里面,经过分析,我们知道只需要在 org.springframework.aop.interceptor.AsyncExecutionAspectSupport.findQualifiedExecutor(BeanFactory,String) 那个方式中,加入这几行标识符要是:

if

(beanFactory instanceof ConfigurableBeanFactory) {

EmbeddedValueResolver embeddedValueResolver = new EmbeddedValueResolver((ConfigurableBeanFactory)beanFactory);

 qualifier = embeddedValueResolver.resolveStringValue(qualifier);

}

但我当时采取的方案是透过 idea 的 Evaluate Expression 功能:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

经过评论区提醒,其实用 CV 大法,更加间接、方便。

同样的道理,间接把 AsyncExecutionAspectSupport 那个类粘到我们他们的工程项目中去:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

这儿需要注意的是,要保证包中文名称也一模一样,因为那个方式的底层逻辑是基于类加载机制实现的。

这种,我们就能针对我们他们工程项目中的 AsyncExecutionAspectSupport 类进行修正:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

再次发起调用,这事儿就算成了:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

那个方式,适用于任何你能拿到源标识符的任何第三方框架。

虽然,许多第三方框架里面都会主动留下足够多多的扩展点,以便采用者进行定制化开发。

因此我提供的那个方式好像用处并不是很大,但我当年看 Dubbo 源标识符的这时候,就是这种的看的。

就像这种,在源标识符里面加入了大量的输出语句,接着基于输出语句去做分析:

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

虽然现在想起来,更加正确的操作应该是基于它的 SPI 机制去做。

但,管它呢,再说当时我就是靠这种歪门邪道,也看的明知道白的。

好了,以上就本文的全部内容。

突出的就是两个言简意赅,单纯蛮横,又足够多称心。

玩去吧。

荒腔走板

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

周末玩了两天《塞尔达:王国之泪》,是真的好玩。

新技能完全释放了玩家们的创造力,当 Max 同学在海拉鲁大陆上采用两个木棍、四个轮子、一块板子、两个风扇造出归属于他们的第一辆车的这时候,简直是开心麻了,走到哪儿都要把车开上,走到哪儿都想着能不能搞个车出。

游戏中提供出的这种创造力,对于游戏开发者来说,他们肯定也不知道玩家基于他们开发的功能,最后会造出什么”离了大谱“的东西。

我在 B 站上也看到一些玩家的创造性视频,太夸张了,简直是掀起了海拉鲁大陆上的”工业革命“,飞机都有了,高达也不远了。

正像我在这首诗里面写的:过节了!耍疯了!开心麻了!

“这戏才卖你 300 多,真的是太亏了。

··············END··············

这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。

推荐👍这是带队牛逼的源标识符。

👍@EventListener

👍

👍

👍

线title

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务