添加自定义注解

本文介绍了一种使用自定义注解@NoHealth排除特定接口日志输出的方法,以及一个用于验证手机号格式的自定义注解@MobilePhone,确保输入符合特定规则。

案例1:

1.demand,排除某个接口的日志输出,用自定义注解@NoHealth,只要有该注解的方法,切面日志忽略该方法。

2.code

NoHealth interface:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author li
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NoHealth {
}

Aspect class:

排除有该注解的方法!@annotation(NoHealth)

 

@Component
@Aspect
public class ControllerAspect extends AbstractAspect {

    private static CxLogger logger = CxLogManager.getLogger(ControllerAspect.class).defaultTag("type", "ControllerAspect");

    private static final String INBOUND = "INBOUND";

    @Pointcut("execution(* com.xxx.xxx.xxx.controller..*(..))&&!@annotation(NoHealth)")
    private void controllerPointCut() {
    }

//*******other

}

controller 

/**
 * @author li
 */
@RestController
public class HealthCheckController {

    private static CxLogger logger = CxLogManager.getLogger(AccessController.class).tag("type", "controller");

    @GetMapping("/_health")
    @NoHealth
    public String check() {
        
        return "OK";
    }

    
}

 

 

/**********************分割线******************************/

案例2:

需求:一个自定义注解,接收参数只能是‘-+数字’最长20位 的 属性注解@MobilePhone

定义类:

package com.cathaypacific.ird2.iam.validator;


import org.apache.commons.lang.StringUtils;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.regex.Pattern;
/**
 * Desc:
 *
 * @author daxing.li
 * @create 2019-06-26 14:50
 */

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {MobilePhone.MobilePhoneConstraintValidator.class})
@Documented
public @interface MobilePhone {

    String message() default "Invalid MobilePhone Number";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    public static class MobilePhoneConstraintValidator implements ConstraintValidator<MobilePhone, String> {

        public MobilePhoneConstraintValidator(){

        }

        @Override
        public void initialize(MobilePhone constraintAnnotation){

        }

        @Override
        public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
            if (StringUtils.isEmpty(s)) {
                return true;
            } else {
                return Pattern.matches("^[-+0-9]{0,20}$", s);
            }
        }
    }

}

 

2.应用:

xxxRequest.class

@Getter
@Setter
public void xxxRequest{

  @MobilePhone(message = "MobilePhone only for 'numbers and - +',and length cannot exceed 20 characters")
    @JsonProperty("mobile_phone")
    private String mobilePhone;
}

 

 

<think>嗯,用户想在IntelliJ IDEA中添加自定义注解并设置快捷键。首先,我需要回忆一下IDEA的相关功能。记得之前看过一些引用,比如引用[4]提到了使用Live Template来创建自定义注解模板,并设置快捷键。还有引用[3]提到在Inspections里设置Javadoc的生成。可能需要分步骤来指导用户。 首先,添加自定义注解应该是指生成代码注释,比如方法或类的注释模板。Live Template应该是一个关键工具。用户需要进入设置,找到Live Templates,然后创建一个新的模板。比如,在Java上下文中,定义缩写,比如“/*@”,然后输入模板内容,使用变量如$date$、$time$等。然后需要绑定快捷键,比如Tab键或者其他组合键。 然后,设置快捷键可能涉及到给Live Template分配快捷方式。不过IDEA默认可能没有直接分配,但用户可以通过编辑模板时指定缩写,然后使用Tab键触发。或者,在Keymap设置里找到相关的模板动作,分配自定义快捷键。 另外,引用[4]中的例子是使用Live Template,并设置快捷键+Tab来输出模板。所以用户需要创建模板,定义变量,然后应用。同时,参数可能需要使用groovy脚本来自动捕获方法参数和返回值,比如用“methodParameters()”和“methodReturnType()”。 可能还需要检查是否启用了Javadoc的检查,如引用[3]提到的,在Inspections里配置Javadoc相关的选项,确保生成的注释符合规范。 最后,测试一下创建的模板是否有效,输入缩写后按Tab,看看是否生成预期的注释。如果有问题,可能需要检查变量是否正确配置,或者上下文是否选择正确。 总结步骤应该是:1. 创建Live Template,填写模板内容。2. 绑定变量和上下文。3. 设置触发方式(比如缩写加Tab)。4. 必要时配置快捷键。可能需要引用相关的引用内容来支持每个步骤的正确性。</think>### 如何在 IntelliJ IDEA 中添加自定义注解并设置快捷键? #### 步骤 1:创建自定义注解模板 1. **打开设置界面** 通过菜单栏 `File` → `Settings`(Windows/Linux)或 `IntelliJ IDEA` → `Preferences`(macOS)进入设置。 2. **配置 Live Template** 在设置中导航至 `Editor` → `Live Templates`,点击右侧 `+` 选择 `Template Group` 创建新分组(例如 `MyAnnotations`),然后选择该分组并再次点击 `+` 添加 `Live Template`[^4]。 3. **定义模板内容** - **缩写(Abbreviation)**:输入触发模板的快捷词(例如 `/*@`)。 - **描述(Description)**:填写模板用途(例如“方法注释”)。 - **模板内容**: ```text /** * @Description - $PARAMS$ * @return $RETURNS$ * @author yourname * @date $DATE$ $TIME$ */ ``` - **变量绑定**:点击 `Edit variables`,为 `PARAMS` 输入表达式 `methodParameters()`,为 `RETURNS` 输入 `methodReturnType()`,`DATE` 和 `TIME` 使用内置函数 `date()` 和 `time()`。 4. **设置作用范围** 在 `Applicable contexts` 中勾选 `Java` → `Declaration`,确保模板仅在方法声明时生效。 #### 步骤 2:设置快捷键 1. **通过缩写触发模板** 默认情况下,输入缩写(如 `/*@`)后按 `Tab` 键即可自动填充模板。 2. **自定义快捷键** - 进入 `Settings` → `Keymap`,搜索 `Live Template`。 - 找到对应的模板,右键选择 `Add Keyboard Shortcut`,设置组合键(例如 `Ctrl + Alt + J`)[^1][^2]。 #### 步骤 3:验证与使用 1. **在代码中测试** 在方法上方输入定义的缩写(如 `/*@`),按 `Tab` 或设置的快捷键,观察是否生成完整注释。 2. **参数自动填充** 确保 `$PARAMS$` 和 `$RETURNS$` 能正确捕获方法参数和返回类型。若未生效,检查变量绑定的表达式是否正确[^4]。 --- ### 示例:自定义类注释 1. **模板配置** ```text /** * @ClassName $NAME$ * @Description * @author yourname * @date $DATE$ */ ``` 2. **作用范围**:绑定到 `Java` → `Class`,使用 `className()` 函数填充 `$NAME$`[^3]。 --- ### 常见问题 - **快捷键冲突**:若快捷键无效,检查 `Keymap` 中是否与其他功能冲突[^2]。 - **变量未解析**:确保 `Edit variables` 中使用了正确的表达式(如 `methodParameters()`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值