private static ObjectMapper objectMapper = null;
//自己写的
static {
objectMapper = SpringUtil.getBean(ObjectMapper.class);
}
//领导写的
private static ObjectMapper getObjectMapper(){
if (Objects.isNull(objectMapper)){
synchronized (JsonUtils.class){
if (Objects.isNull(objectMapper)){
objectMapper = SpringUtil.getBean(ObjectMapper.class);
}
}
}
return objectMapper;
}
SpringUtil如果没有被spring容器回调,类加载时机又早,你这启动时获取bean大概率出现空指针异常,人家用的时候才获取,虽然也可能出现空指针,但是一般手动触发,如果是运行时触发而不是启动触发这个获取方法,基本不会出现空指针
都是单例模式 你的是饿汉式,领导是懒汉式,双重锁减少开销。
简单说就是领导保证了性能,减少了开销,使用的时候才创建。
这里应该是不需要指令重排,因为bean已经在spring容器里。