浅学 Guava 框架的使用

Guava 是 Google 开发的一个 Java 库,提供了许多核心库的扩展,特别是在集合、缓存、并发、字符串处理等方面。它旨在提高 Java 开发的效率和代码的可读性。

Guava的作用有很多,其实更多的是使用本地缓存的作用,重点关注缓存的使用。

如何在 Spring Boot 中使用 Guava

在 Maven Spring Boot 项目中使用 Guava 实现本地缓存,可以通过 Guava 的 Cache 类来轻松管理缓存数据。这里将详细介绍如何设置和使用 Guava 缓存。

1. 添加 Maven 依赖

在你的 pom.xml 文件中,添加 Guava 的依赖:

<dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>31.1-jre</version> <!-- 请根据最新版本进行替换 -->
    </dependency>
</dependencies>

2. 创建缓存服务

接下来,我们可以创建一个服务类,用于管理缓存的逻辑。以下示例展示了如何使用 Guava 的 Cache

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class CachedDataService {

    // 创建 Guava 缓存实例
    private final Cache<String, String> cache = CacheBuilder.newBuilder()
            .expireAfterWrite(10, TimeUnit.MINUTES) // 设置写入后10分钟过期
            .maximumSize(100) // 最大缓存项数为100
            .build();

    // 从缓存中获取数据
    public String getData(String key) {
        return cache.getIfPresent(key); // 若存在则返回缓存值,否则返回 null
    }

    // 将数据放入缓存
    public void putData(String key, String value) {
        cache.put(key, value); // 将键值对放入缓存
    }

    // 清空缓存
    public void invalidateCache(String key) {
        cache.invalidate(key); // 清除指定键的缓存
    }

    // 清空所有缓存
    public void invalidateAll() {
        cache.invalidateAll(); // 清空所有缓存
    }
}

3. 使用缓存服务

在其他服务或控制器中,可以注入 CachedDataService 并使用它来管理缓存:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class MyController {

    @Autowired
    private CachedDataService cachedDataService;

    @GetMapping("/data/{key}")
    public String getData(@PathVariable String key) {
        // 从缓存中获取数据
        String value = cachedDataService.getData(key);
        if (value == null) {
            // 如果缓存中没有,则从其他地方获取数据
            value = "Default Value"; // 这里可以替换为实际的数据获取逻辑
            cachedDataService.putData(key, value); // 将新值放入缓存
        }
        return value;
    }

    @PostMapping("/data")
    public void putData(@RequestParam String key, @RequestParam String value) {
        cachedDataService.putData(key, value); // 将数据放入缓存
    }

    @DeleteMapping("/data/{key}")
    public void invalidateData(@PathVariable String key) {
        cachedDataService.invalidateCache(key); // 清除指定键的缓存
    }
}

代码解释

  • @Service:Spring 的注解,标记 CachedDataService 为服务类,Spring 会管理它的生命周期。
  • CacheBuilder.newBuilder():创建一个新的缓存构建器。可以设置过期时间和最大缓存大小。
  • expireAfterWrite(10, TimeUnit.MINUTES):设置缓存项在写入后10分钟过期。
  • maximumSize(100):设置缓存的最大项数为100。超过这个数量的缓存项会被自动清除。
  • cache.getIfPresent(key):尝试从缓存中获取指定键的值,如果不存在则返回 null
  • cache.put(key, value):将指定的键值对放入缓存。
  • cache.invalidate(key):清除指定键的缓存。
  • cache.invalidateAll():清除所有缓存项。

Guava 的其他功能

  1. 增强的集合类:提供了不可变集合、Multiset、Multimap 等扩展集合类型,增强了 Java 原生集合的功能。
  2. 缓存:提供简单易用的缓存实现,支持基于时间、大小等策略的缓存。
  3. 并发工具:提供了更强大的并发工具,如 ListenableFuture,改进了异步编程。
  4. 字符串处理:提供了丰富的字符串处理方法,例如 JoinerSplitter,使字符串的拼接和拆分更加简便。
  5. 预条件检查:提供了 Preconditions 类,简化了参数的检查。

下面是一些 Guava 功能的示例,展示如何在 Spring Boot 中使用这些功能。

示例 1:使用 ImmutableList
import com.google.common.collect.ImmutableList;

import org.springframework.stereotype.Service;

@Service
public class UserService {

    public ImmutableList<String> getUserNames() {
        return ImmutableList.of("Alice", "Bob", "Charlie");
    }
}
  • ImmutableList:创建一个不可变的列表,确保列表在创建后不能被修改。
示例 2:使用 Joiner 和 Splitter
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StringService {

    public String joinNames(List<String> names) {
        return Joiner.on(", ").join(names);
    }

    public List<String> splitNames(String names) {
        return Splitter.on(", ").trimResults().splitToList(names);
    }
}
  • Joiner:用于将字符串列表连接成一个字符串,分隔符为 ", "
  • Splitter:用于将一个字符串按指定分隔符拆分成列表,并去除空格。

代码和注解的解释

  • @Service:Spring 的注解,表示该类是一个服务组件,Spring 将自动检测并管理它。
  • ImmutableList.of(...):创建一个不可变的列表,确保其内容无法被修改。
  • CacheBuilder.newBuilder():构建一个新的缓存实例,允许配置缓存的各种参数。
  • Joiner.on(", "):指定连接字符串的分隔符。
  • Splitter.on(", "):指定拆分字符串的分隔符,并可配置额外的处理(如去除空格)。

总结

使用 Guava 提供的缓存功能,可以在 Spring Boot 项目中实现高效的本地缓存管理。Guava 的缓存 API 直观且易于使用,非常适合需要临时存储和快速访问的数据场景。


其他作用可以看下面链接
https://mp.weixin.qq.com/s/aRDY6oxYCGhASLc-Y2Ne6A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值