java 动态参数称及值_Spring框架根据传入参数动态的修改注解属性的值

由于业务需要,需要在自定义注解中将参数中的值传入到注解的指定属性中,这很容易让我联想到 Spring 的 SpEL. 虽然根据反射也能得到相同结果,但是有更好的工具为什么不用呢?因此根据网上大神的攻略,整合出模拟版的 SpEL 使用.

开发环境 JDK1.8

spring版本 5.0.6.RELEASE

###POM引入

org.aspectj

aspectjweaver

1.8.13

org.springframework

spring-expression

5.0.6.RELEASE

这里我引入的是 spring boot的相关版本,为了具有通用性, 因此精确到实际使用的引入和版本 ###主要代码片段

@AfterReturning(value = "@annotation(primaryKey)")

public void doAfter(JoinPoint joinPoint, PrimaryKey primaryKey) throws Exception {

ExpressionParser parser=new SpelExpressionParser();

EvaluationContext ctx = new StandardEvaluationContext();

//获取方法的参数名和参数值

Signature signature = joinPoint.getSignature();

MethodSignature methodSignature = (MethodSignature) signature;

List paramNameList = Arrays.asList(methodSignature.getParameterNames());

List paramList = Arrays.asList(joinPoint.getArgs());

//将方法的参数名和参数值一一对应的放入上下文中

for (int i = 0; i < paramNameList.size(); i++) {

ctx.setVariable(paramNameList.get(i), paramList.get(i));

}

//解析SpEL表达式获取值

String value = parser.parseExpression(primaryKey.primaryKey()).getValue(ctx).toString();

//解析后的业务代码

...

}

这个地方,我是在方法执行完毕后的切面中进行操作, 可以根据业务需要自行决定在哪里使用. 代码中的 primaryKey.primaryKey() 分别是我所自定义的注解名和注解属性d

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值