springboot 自定义注解 annotation

本文介绍了如何在Java中使用AspectJ创建注解,定义切面类并应用到@RestController的方法上,实现在调用特定方法时获取并打印注解信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、创建注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodRemarkInfo {
    String methodRemark() default "";
}

2、创建注解的aop切面类


@Aspect //说明当前对象时一个切面
@Component
public class MethodRemarkInfoAspect {

    @Pointcut("@annotation(com.example.dyc.annotation.MethodRemarkInfo)")
    public void pointCut(){}

    @Around("pointCut()")
    public void getMethodRemarkInfo(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        // 获取目标方法上的注解
        MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
        Method method = methodSignature.getMethod();
        MethodRemarkInfo methodRemarkInfo = method.getAnnotation(MethodRemarkInfo.class);

        if(methodRemarkInfo == null){
            proceedingJoinPoint.proceed();
        }
        
        // 获取注解的字段值
        String methodRemark = methodRemarkInfo.methodRemark();
        System.out.println("methodRemarkInfo: " + methodRemark);

        //执行目标方法
        proceedingJoinPoint.proceed();
    }
}

3、使用注解标注方法

@RestController
@RequestMapping(value="/goods")
public class GoodsController {

    @Resource
    Goods goods;

    @GetMapping("/goodsInfo")
    @MethodRemarkInfo(methodRemark = "这是goodsInfo方法")
    public String goodsInfo(String name){
        System.out.println("goodsInfo");
        return goods.getName() + " " + goods.getNum()  + " " + goods.getNum();
    }
}

4、运行结果

### 创建和使用自定义注解Spring Boot中创建并使用自定义注解可以增强代码的可读性和重用性。下面介绍如何实现这一目标。 #### 定义自定义注解 通过Java内置的功能来定义新的元数据标签,即注解。首先需要导入`java.lang.annotation.*`包中的类以便于声明新类型的注解: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface CustomAnnotation { String value() default "Default Value"; } ``` 这段代码展示了怎样构建一个简单的名为`CustomAnnotation`的注解[^1]。此注解能够应用于方法上,并且可以在运行时被解析出来。属性`value()`允许使用者给定字符串参数,默认情况下设置为"Default Value"。 #### 使用AOP处理自定义注解逻辑 为了使自定义注解生效,通常会结合面向切面编程(AOP),这样可以根据特定条件执行额外的操作而无需修改业务逻辑本身。这里展示了一个基本的例子说明如何配置AspectJ以响应带有上述自定义注解的方法调用: ```java import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; @Aspect @Component public class AnnotationProcessor { @Before("@annotation(customAnnotation)") public void process(CustomAnnotation customAnnotation){ System.out.println("Processing method with custom annotation: "+customAnnotation.value()); } } ``` 当任何地方有方法应用了`CustomAnnotation`并且该方法被执行时,上面定义的过程将会打印一条消息到控制台显示正在处理哪个具体的实例化后的注解对象及其传递过来的信息[^2]。 #### 应用于实际项目中 现在有了这个功能强大的工具之后就可以将其融入日常工作中去了。比如在一个基于RESTful API的服务里边用来验证请求头是否合法;或者是作为缓存机制的一部分决定哪些查询结果应该存储起来供后续快速访问等等。只要合理规划好应用场景就能发挥出自定义注解的最大价值[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值