Controller里面方法不小心写成了private的问题
发现问题
今天本来是为了解决一个Apollo配置与Code同时变更不一致问题,我需要去通过SPI的方式去重写Apollo刷新Remote配置。所以,我就写一个很小的DEMO来验证每次变更Apollo配置对我服务端的取数。
1 |
|
对应在Apollo的配置
1 | market.test.name = Test1111 |
Controller层的代码
1 |
|
然后我就发起请求来验证我的取数,结果给我报了NullpointException的异常。因为这种代码几乎每天都在写,一下次说我的Bean没有注入进来,还有点方。
然后,我细心的debug了看了一下。如图所示:

图片可以说明:
Spring容器100%已经存在了MarketConfig的Bean对象;但是
MarketConfig在该Controller里面100%没有注入进来 ;this显示出了一个代理的路径;于是,我在同样的
Controller去请求另外一个Method,但可以正常访问。

Spring容器100%已经存在了MarketConfig的Bean对象;- 而且是可以确定这次
MarketConfig是有注入进来的(没有展示图,不太方便) this直接是显示的自己的地址
由于我就比较了一下方法的区别,最主要的区别点就是在于一个是private,另外一个是public。
其实,这里我就很快明白了。因为我们这边在Controller层做了一些AOP来做监控与埋点。现阶段主要用的是CAT(现在做了很多的一些封装,后面可以分享下,如何做到无浸入性以及与Apollo的打通)。
AOP 里面用的是反射机制,用private修饰的类是注入失败的,因为拿不到,只能用public或者protected修饰。