当前位置:首页 > 开发 > 编程语言 > Spring > 正文

spring aop中实现变更方法参数以及annotation

发表于: 2014-01-09   作者:chaoren3166gg   来源:转载   浏览次数:
摘要: 实现功能: 利用spring aop annotation实现切片操作,并改变方法参数的值 判断方法或方法的参数上是否有特定的annotation,如果有,则按照其它逻辑进行处理 aop切片操作 @Component @Aspect public class AopAnnotation { private Logger logger = L
  1. 实现功能:
  • 利用spring aop annotation实现切片操作,并改变方法参数的值
  • 判断方法或方法的参数上是否有特定的annotation,如果有,则按照其它逻辑进行处理
  1. aop切片操作
@Component
@Aspect
public class AopAnnotation {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Pointcut("execution(public * com.*.*.*(..))")
    public void pointCut(){

    }

    @Before(value = "pointCut()")
    public void before(){
        logger.info("annotation,   before################################");
    }

    @Around("pointCut()")
    public void around(ProceedingJoinPoint joinPoint){
        logger.info("annotation,   around################################");
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.start();
        try {
            joinPoint.proceed();
        } catch (Throwable e) {

        }
        stopwatch.stop();
        logger.info("annotation, ###################cost time: " + joinPoint.getThis().getClass().getName() +
                "\t" + stopwatch.elapsedMillis() + "(ms)");
    }

    @AfterThrowing(pointcut = "pointCut()")
    public void aa(){
          logger.info("error");
    }

    
    public Verifier verifier;
}

 

  1. 声明annotation
  • @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.PARAMETER)
    public @interface Param {
      String value();
    }
     
  1. 在joinpoint中进行处理,判断参数是否有annotation
  • @Around("sqlEscapePoint()")
        public Object sqlEscapeAdvice(ProceedingJoinPoint joinPoint) {
            logger.info("aroundSqlEscape,   around################################");
            Object[] objects = joinPoint.getArgs();
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            Method method = signature.getMethod();
            Annotation[][] annotations = method.getParameterAnnotations();
            for (int i = 0; i < objects.length; i++) {
                Object tmpObject = objects[i];
                boolean notEscape = false;
                if (annotations.length > 0) {
                    for (Annotation annotation : annotations[i]) {
                        if (annotation.annotationType() == NotEscapeSql.class) {
                            notEscape = true;
                        }
                    }
                }
                if (notEscape) {
                    continue;
                }
                objects[i] = EscapeUtil.escape(tmpObject, false, false, true);
            }
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.start();
            Object result = null;
            try {
                result = joinPoint.proceed(objects);
            } catch (Throwable e) {
                logger.error("sql escape", e);
            }
            stopwatch.stop();
            logger.info("mapper cost time: " + joinPoint.getThis().getClass().getName() + ","
                    + method.getName() + "\t" + stopwatch.elapsedMillis() + "(ms)");
            return result;
        }
     

spring aop中实现变更方法参数以及annotation

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一、静态代理 参见代码 二、动态代理 参见j2se专题动态代理与反射 三、AoP介绍 根据上例中spring_dy
转自:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/index.html 使用 Annotati
转自: http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/index.html 使用 Annotat
理解了前面动态代理对象的原理之后,其实还是有很多不足之处,因为如果在项目中有20多个类,每个类
业务接口 package dao; public interface UserDao { public void addUser(); } 接口实现 package da
In this tutorial, we show you how to integrate AspectJ annotation with Spring AOP framework.
业务接口 package dao; public interface UserDao { public void addUser(); } 接口实现 package da
一、概述。 AOP大家都知道切面编程,在Spring中annotation可以实现简单的AOP列子。下面还未大家介绍
关于在后台实现前台表单的格式验证: 因为对于一个web工程来说,安全是比较重要的,view中实现的js验
这里讲如何使用Annotation来实现Spring的AOP功能。 通过Annotation来实现Spring的AOP功能,要导入几
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号