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 的其他功能
- 增强的集合类:提供了不可变集合、Multiset、Multimap 等扩展集合类型,增强了 Java 原生集合的功能。
- 缓存:提供简单易用的缓存实现,支持基于时间、大小等策略的缓存。
- 并发工具:提供了更强大的并发工具,如
ListenableFuture,改进了异步编程。 - 字符串处理:提供了丰富的字符串处理方法,例如
Joiner和Splitter,使字符串的拼接和拆分更加简便。 - 预条件检查:提供了
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
452

被折叠的 条评论
为什么被折叠?



