如何让Lombok的@RequiredArgsConstructor忽略@Value注入的final字段?
解决方案
有两种优雅的Lombok方案可以实现需求,无需修改字段访问修饰符:
方案一:使用@RequiredArgsConstructor的exclude参数
直接在注解中指定需要排除的字段名,生成的构造方法会自动忽略该字段:
@RequiredArgsConstructor(exclude = "CATEGORY") @Component public class A { @Value("${a.category:RANDOM}") private final String CATEGORY; private final String name; private final String mail; }
方案二:使用@Exclude注解标记字段
给不需要纳入构造方法的字段添加@Exclude注解(需Lombok 1.18.16及以上版本支持),语义更直观:
@RequiredArgsConstructor @Component public class A { @Exclude @Value("${a.category:RANDOM}") private final String CATEGORY; private final String name; private final String mail; }
原理说明
两种方案都会让Lombok生成仅包含name和mail的构造方法,Spring会通过该构造方法注入这两个字段;而CATEGORY字段则由@Value注解单独完成配置值注入,@Component注解保证Spring能正确管理Bean的生命周期,处理所有注入逻辑。
内容的提问来源于stack exchange,提问作者IceMajor
相关产品推荐
相关产品推荐

