自定义注解,通过SpEL表达式调用类方法、引用方法参数、引用方法参数的属性

需求背景

自定义注解,定义注解属性,在使用注解时通过SpEL表达式给属性传值。

自定义注解

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiLog {
 
    /**
     * 数据编号
     * @return
     */
    String taskNo() default "";
 
    /**
     * API提供商
     */
    String apiProvider() default "";
 
    /**
     * API功能
     */
    String apiFunction() default "";
 
    /**
     * API调用场景
     */
    String scene() default "";
 
    /**
     * API响应码
     * 通过该名称获取响应code值,判断API是否响应成功
     */
    String codeName() default "";
 
    /**
     * API响应码值
     * API响应码值,一般填成功的码值
     */
    String code() default "";
}

注解的属性随意,按照功能需求设计。

在注解时使用SpEL表达式

1.在SpEL表达式中引用方法的入参

@ApiLog(taskNo = "#str")
public  String test1(String str){
    return str;
}

2.在SpEL表达式中引用方法的pojo类型参数的属性

@ApiLog(taskNo = "#requestDto.orderNo")
public void test(DailyPowerRequestDto requestDto){
 
}

3.在SpEL表达式中调用静态方法

@ApiLog(taskNo = "T(com.dycjr.xiakuan.order.service.impl.DailyPowerServiceImpl).test1(#requestDto.orderNo)")
public void test(DailyPowerRequestDto requestDto){
 
}
 
public static void test1(String str){
    System.out.println(str);
}

格式为:T(com.xx.xxx.xxxx...).functionName(参数1,参数2.....),其中括号里填“被调用的方法所属类的包路径”,可不是当前使用这个注解的类的包路径,并且调用的方法必须是静态方法,否则会报“找不带该方法”异常.

4.在SpEL表达式中调用非静态方法

@ApiLog(taskNo = "new com.dycjr.xiakuan.order.service.impl.DailyPowerServiceImpl().test2(#requestDto.orderNo)")
public void test(DailyPowerRequestDto requestDto){

}

public void test2(String str){
    System.out.println(str);
}

注意,调用非静态方法,语法非常像new一个对象的写法,但不同的是不能直接“new 类名”,必须是“new 类的完整包路径+类名”(参考示例),即使是调用的方法就在当前类中,也要严格按照规定格式写,否则一定报错。

5.在SpEL表达式中引用枚举

枚举

@Getter
@AllArgsConstructor
public enum IsDeleteEnum {
    /**
     * 数据是否删除
     */
    NO(0, "有效"),
    YES(1, "已删除")
    ;
 
    private Integer code;
    private String desc;
 
}

SpEL表达式

 
@ApiLog(taskNo = "T(com.dycjr.xiakuan.order.enums.IsDeleteEnum).NO.getCode()")
public void doTask(DailyPowerRequestDto requestDto) {
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值