背景
首先 IDEA 默认是不支持 SpEL
的代码提示的
根据网上教程, 我们只能使用java-annotations
库, 并添加@Language("SpEL")
注解
但这样仅仅是能够支持SpEL表达式, 并不支持自定义变量, 也不支持提示方法参数和返回值. 尤其是对写框架和第三方库的人来说, 特别不友好
因此我写了这么一个IDEA插件: SpEL Extension, 支持2021.3以上版本的IDEA
安装
-
在项目中引入相关注解库
pom.xml
<dependency> <groupId>kim.nzxy</groupId> <artifactId>spel-extension</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency>
build.gradle.kts
dependencies { compileOnly("kim.nzxy:spel-extension:1.0.0") }
build.gradle
dependencies { compileOnly 'kim.nzxy:spel-extension:1.0.0' }
-
在IDEA中搜索并安装
SpEL Extension
插件, 安装后无需重启
使用
如图所示, 支持两种情况的代码提示
- 将
SpELMethod
/SpELField
注解放到注解的字段上, 即可添加相应的代码提示支持功能 - 将
SpELWith
注解标注的普通的java字段中, 即可给出对应注解的代码提示(注: 仅支持标注了SpELMethod
和SpELField
的字段, 暂不支持Spring原生字段)
注解详解
@kim.nzxy.spel.SpELMethod
----函数相关
如果标注了SpELMethod的注解作用于方法上, 则提示方法的返回值和参数信息
名称 | 类型 | 默认值 | 解释 |
---|---|---|---|
result | boolean | false | 为true则支持方法返回值 |
resultName | String | “result” | 方法返回值的变量名称 |
parameters | boolean | false | 为true表示支持方法参数, 默认支持所有参数名称 |
parametersPrefix | String[] | {“p”, “a”} | 方法参数序号名称, 如p0/a0表示第一个参数 如不需要, 可手动指定parametersPrefix = {} |
@kim.nzxy.spel.SpELField
–字段相关
定义该字段的变量参数, 支持定义多个
名称 | 类型 | 默认值 | 解释 |
---|---|---|---|
name | String | \ | SpEL变量名, 如果为"root", 则视为SpEL的root节点 |
type | Class<?> | Object.class | 变量类型, 如果typeStr 非空, 则忽略此字段 |
typeStr | String | “” | 变量类型, 支持泛型, 示例: String , java.lang.String , java.util.List<String> |
@kim.nzxy.spel.SpELWith
–方便定义常量
如果参数特别长, 可以用来方便的定义常量, 此注解可以方便的在常量字符串中支持代码提示
名称 | 类型 | 默认值 | 解释 |
---|---|---|---|
anno | Class<? extends Annotation> | \ | 对应注解 |
field | String | “value” | 对应注解字段名称 |
TODO
- 支持配置文件配置, 免去引入
spel-extension
库 - 支持配置
SpEL
自定义函数 - 支持自动推荐插件安装