首页 > 编程语言 > 详细

java-自定义注解

时间:2020-01-07 13:23:56      阅读:93      评论:0      收藏:0      [点我收藏+]

概述:本章简述自定义注解及实现,写完会对IOC与AOP有深刻的理解。感觉注解不再神秘。

1:理解:从简单的应用层面来说,分2步。

  第一步:定义一个注解,这个注解中可以有不同的属性。可以理解是我要带的参数。

  第二步:写一个拦截,即AOP。拦截请求,然后判断是否存在这个注解,如果存在我们可以写我们的逻辑了。

  总结:举例我们要执行一个action前需要获取这个用户的登录信息。比较笨的方法是写一个获取登录信息的方法,然后每个action代码的最前面执行这个方法。

     而我们可以使用自定义注解完成这个事,第一步就是方法的入口。第二步就是方法的实现。

2:实现。

  第一步:定义注解入口。

@Target(ElementType.METHOD)    //作用域:类,方法等
@Retention(RetentionPolicy.RUNTIME)    //生命周期:程序在运行时有效
@Documented
public @interface Test {

    String value() default "";    //可以传value值,不传默认是""
    
}

  第二步:定义AOP。

@Aspect    //切面类
@Component
public class TestAop {
    
    /**
     * 定义切点
     * @param test
     * within(org.springframework.web.bind.annotation.RestController *) 表示拦截所有引入RestController注解的
     * @annotation(test) 表示包含 test注解的
     * execution(* *(..)) 表示可以有任意返回值,任意路径,任意参数
     */
    @Pointcut("within(org.springframework.web.bind.annotation.RestController *) && "
            + "@annotation(test) && execution(* *(..))")
    private void pointCut(Test test) {

    }
    
    /**
     * before拦截,一般用于身份验证,数据拦截等
     */
    @Before("pointCut(test)")
    private void before(JoinPoint joinPoint,Test test) {
        //具体的处理逻辑
        
        String value = test.value();  //可以获取注解传入的值
        
        Object[] args = joinPoint.getArgs(); //获取方法传入的信息
        for (Object obj : args) {
            //可以获取HttpServletRequest
            if(obj instanceof HttpServletRequest) {
                HttpServletRequest req = (HttpServletRequest) obj;
            }
        }
        
    }
    
}

  @After

  引入这个注解的方法执行之后要做的处理。
  @Around

  引入这个注解的方法执行中做的处理,比如可以做日志处理。

java-自定义注解

原文:https://www.cnblogs.com/dblog/p/12158119.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!