Java 自定义注解

一、Java 自定义注解的用途、

   1、可以记录在特殊方法进行日志记录

         2、可以进行 特殊鉴权 如 @ValidateRole(“admin") 只有当前用户拥有指定角色时才放行 否则抛自定义异常 无权限

        3、可以用于参数 如 Controller 方法中的参数进行 参数格式验证

 

二、自定义注解记录需要重试的请求数据到数据库

   2.1 pom 节点引入    

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

启动需要加 @EnableAspectJAutoProxy

@SpringBootApplication
@EnableAspectJAutoProxy
@ComponentScan("com.lyb.*")
public class OpenDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(OpenDemoApplication.class, args);
    }
}

 

 

 2.2  自定义注解名称 

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RecordRetryMessage {


    /**
     * 保存重试消息类型
     * @return
     */
    int messageType() default 1;
}

2.3 依赖切面 aspect 实现 自定义注解 

@Aspect
@Component
public class RetryMessageAspect {

    @Autowired
    UserInfoService userInfoService;

    @Pointcut("@annotation(com.lyb.web.annotation.RecordRetryMessage)")
    public void retryMessage() {

    }

    @Around("retryMessage()")
    public void before(ProceedingJoinPoint joinPoint) throws Throwable {
        Object[] objects = joinPoint.getArgs();
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        RecordRetryMessage myLog = signature.getMethod().getAnnotation(RecordRetryMessage.class);
        System.out.println("注解上的参数值:" + myLog.messageType());
        System.out.println("userInfoService.testC() = " + userInfoService.testC());
        objects[1] = "修改后的参数值";

        joinPoint.proceed(objects);


    }
}

2.4 使用自定义注解 

    @RecordRetryMessage(messageType = 1)
    public  void  testB(String l,String l1) {
        System.out.println("testB(); = ");
    }

 

 

      

 

posted @ 2024-07-28 10:30  xiaoBai1001  阅读(15)  评论(0编辑  收藏  举报