写法总结
生成空数组
Collections.emptyList()lombok导致的字段被初始化
java
@RequiredArgsConstructor
@Service
public class WecomBotService {
String TOKEN = "p5t9wSO0pcWeJhvZMZ";
private DifyApi difyApi;
}- @AllArgsConstructor 会为类生成一个包含所有字段(包括 TOKEN)的构造函数。
- Spring 在实例化 Bean 时,会优先使用这个构造函数进行依赖注入。
- 由于 Spring 容器中通常找不到类型为 String 且名为 TOKEN 的 Bean,如果 Spring 没有报错(可能是因为设为了非 required,或者根据上下文注入了空值),它可能会将这些 String 字段注入为 null。
- 关键点:构造函数中的赋值操作发生在字段初始化之后。虽然字段定义时有默认值,但随后的构造函数执行时,传入的参数(可能是 null)覆盖了初始值。
方法一:改为 static final 常量(推荐,如果它们不需要动态配置) Lombok 的 @AllArgsConstructor 默认不会包含 static 字段。
方法二:使用 @RequiredArgsConstructor + final 这是 Spring 构造器注入的最佳实践。只注入需要的依赖(DifyApi),而配置项保持默认值或另外注入。
Map的初始化
Map<String, Object>