如何用IDEA结构替换将@Autowired转final加@RequiredArgsConstructor
改造可行性结论
完全可以借助IntelliJ IDEA自带的结构性替换功能完成该批量代码改造,无需额外安装插件,按步骤配置模板即可实现。
具体操作步骤
首先通过顶部菜单栏依次选择 Edit -> Find -> Replace Structurally 唤起结构性替换面板,分两次完成替换操作:
第一步:移除字段@Autowired注解,添加final修饰符
- 在搜索模板输入框填入以下内容,匹配所有标注@Autowired的私有字段:
@Autowired private $FieldType$ $fieldName$; - 在替换模板输入框填入以下内容,替换为final修饰的私有字段:
private final $FieldType$ $fieldName$; - 模板变量配置:将
$FieldType$、$fieldName$的匹配次数设置为1,关闭模糊匹配;如果字段上还搭配了@Qualifier、@Lazy等其他注解,可将搜索模板调整为如下格式,给新增的$OtherAnno$变量设置匹配次数为0..∞,替换时保留原有其他注解:
搜索模板:
替换模板:@Autowired $OtherAnno$ private $FieldType$ $fieldName$;$OtherAnno$ private final $FieldType$ $fieldName$; - 先点击「Find」预览所有匹配结果,确认没有误命中非注入字段后,执行全量替换。
第二步:给符合条件的类添加@RequiredArgsConstructor注解
- 清空上一步的搜索、替换模板,填入新的类匹配规则:
搜索模板:
替换模板:public class $ClassName$ { private final $FieldType$ $fieldName$; $Content$; }@RequiredArgsConstructor public class $ClassName$ { private final $FieldType$ $fieldName$; $Content$; } - 模板变量配置:
$fieldName$匹配次数设置为1..∞,确保类中至少存在一个final注入字段才命中规则$Content$匹配次数设置为0..∞,用来匹配类中剩余的其他字段、方法、内部类等所有内容- 配置排除规则,跳过已经标注@RequiredArgsConstructor的类,避免重复添加注解
- 同样先预览匹配结果,确认范围无误后执行替换。
注意事项
- 所有替换操作执行前必须通过预览核对匹配项,避免误改普通私有字段、已经存在自定义带参构造器的类
- 替换完成后检查类的导包列表,IDEA一般会自动导入
lombok.RequiredArgsConstructor,如果未自动导入,将光标放到注解上按Alt+Enter手动导包即可 - 如果类中已经存在自定义的带参构造方法,不要执行该替换,否则会和Lombok自动生成的构造方法产生冲突
内容的提问来源于stack exchange,提问作者Ultoret
相关产品推荐
相关产品推荐

