el modo de diseño elegante a escribir el código

Modo de estrategia

En el interior ifelse

Template Method

getUserById, antes de cada consulta debe caché primera consulta, consulta caché de esta parte de las plantillas de código, para lograr, siempre y cuando la clase para consultar la base de datos

//1.模板
@Component
public class ModuleTemplate {
    @Autowired
    private RedisTemplate redisTemplate;

    public <T> T getObjectById(Integer key, BaseService<T> baseService){
        T result = (T) redisTemplate.opsForValue().get(key);
        if (null == result){
            synchronized (this){
                //查询缓存
                result = (T) redisTemplate.opsForValue().get(key);
                if (null == result){
                    //查询数据库
                    result = baseService.getObjectById();
                    redisTemplate.opsForValue().set(key,result);
                }
            }
        }
        return result;
    }
}
//2.base接口,用作实现类查询数据库
@FunctionalInterface
public interface BaseService<T> {
    public T getObjectById();
}
//3.UseService接口和实现类

public interface UserService {
    public User getUserByIdTemplate(Integer userId);
}



@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private ModuleTemplate moduleTemplate;

  @Override
    public User getUserByIdTemplate(Integer userId) {
        User user = moduleTemplate.getObjectById(userId,() ->{
            //查询数据库
            return getUserById(userId);
        });
        return user;
    }
}
Publicados 172 artículos originales · ganado elogios 0 · Vistas 5694

Supongo que te gusta

Origin blog.csdn.net/weixin_44635157/article/details/104631829
Recomendado
Clasificación