小心Lombok用法中的坑
刚才写完了代码,自测的时候,出现了NPE问题。
排查的时候发现是Lombok的坑,以前也遇到过,所以觉得有必要过来记录一下。
我先描述一下现象,我的代码里面订单服务A 需要调用缓存服务B,服务B就是一个Bean,使用方式是这样的:
class ServiceA {
//使用 Lombok 提供的setter
@Setter
private ServiceB bXCacheService;
public Data getData() {
//这里出现了NPE问题
bXCacheService.getSomeThing();
}
}
这个问题使用Lombok 的同学可能有人遇到过,我用的是蚂蚁的Sofa,Spring也是类似的,
先说下bean初始化过程,是通过反射,调用set 方法初始化bean,下面代码是我截取的部分代码:Spring 中的初始化bean方法
public void setValue(final Object object, Object valueToApply) throws Exception {
//获取write方法,实际就是setXXX方法
final Method writeMethod = this.pd.getWriteMethod();
if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers()) && !writeMethod.isAccessible()) {
if (System.getSecurityManager() != null) {
AccessController.doPrivileged(new PrivilegedAction