`
chaoren3166gg
  • 浏览: 20018 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
  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;
        }
     
1
1
分享到:
评论

相关推荐

    spring aop实例annotation方法实现

    本实例将详细探讨如何通过注解(Annotation)来实现Spring AOP的方法拦截。 一、Spring AOP基础 Spring AOP是Spring框架的一部分,它提供了一种在运行时织入横切关注点(如日志、事务管理等)到目标对象的能力。AOP...

    在自定义spring aop中使用el获取拦截方法的变量值。

    标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...

    springboot+aspect实现springaop拦截指定方法.zip

    综上所述,SpringBoot结合AspectJ实现SpringAOP拦截指定方法,主要涉及到Spring AOP的原理、切点和通知的定义、自定义注解的使用,以及如何在SpringBoot项目中整合AspectJ进行更复杂的切面编程。通过这些知识点,...

    Spring Aop Advise方法(增强方法) 中获取目标方法的参数

    通过以上知识,我们可以理解如何在Spring AOP中实现Advise,以及如何在Advise中获取和操作目标方法的参数。在实际开发中,这种能力使得我们可以灵活地为系统添加跨切面的监控、日志、事务管理等功能,而无需改动业务...

    基于注解实现SpringAop

    基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop

    Spring AOP实现机制

    **Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    Spring框架中的AOP模块使用了动态代理来实现AOP概念。Spring AOP允许开发者定义切面,并在这些切面中指定拦截的方法。Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,...

    spring aop jar 包

    `aop-jar`这个压缩包可能包含了Spring AOP的实现类、接口、以及其他相关的辅助类,例如动态代理类、切点匹配器等。在项目中,我们通常会将这个jar包引入到类路径下,以便使用Spring AOP的功能。 总的来说,Spring ...

    Spring Aop的简单实现

    在本项目中,我们将探讨如何通过配置文件实现Spring AOP,包括前置通知、后置通知以及拦截器的运用。 首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的...

    spring aop实现接口参数变更前后对比和日志记录

    spring aop实现接口参数变更前后对比和日志记录完整代码,拿到项目代码,只需要做数据库连接的修改即可运行起来使用,代码案例详细,真是可靠,代码原文地址:...

    初探spring aop内部实现 java

    本篇文章将深入探讨Spring AOP的内部实现,以及如何通过源代码理解其DataSource实现和FactoryBean模式。 首先,让我们了解AOP的基本概念。AOP的核心思想是“切面”,它封装了特定的关注点,如日志记录、事务管理、...

    Spring  AOP实现方法大全

    【Spring AOP实现方法大全】 在Spring框架中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们在不修改业务代码的情况下,插入额外的功能,比如日志记录、事务管理等。在...

    Spring AOP的简单实现

    在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...

    spring aop切面拦截指定类和方法实现流程日志跟踪

    Spring AOP 是Spring框架提供的一种实现AOP的方法。通过AOP,开发者可以在不修改原有业务代码的情况下添加新的行为或功能,例如日志记录、性能监控等。这种方式极大地降低了业务代码的耦合度,提高了代码的可读性...

    简单spring aop 例子

    本示例将简要介绍如何在Spring应用中实现AOP,通过实际的代码示例帮助理解其工作原理。 首先,我们要理解AOP的核心概念。AOP是一种编程范式,它允许开发者定义“切面”(Aspects),这些切面封装了特定的关注点,如...

    反射实现 AOP 动态代理模式(Spring AOP 的实现 原理) - Java 例子 -

    在Spring AOP中,`Proxy`类会根据目标对象的接口生成一个代理类,这个代理类会实现目标对象的所有接口,并在每个方法调用前后插入相应的通知。`InvocationHandler`接口定义了一个`invoke`方法,当调用代理对象的方法...

    Spring AOP 16道面试题及答案.docx

    引介(Introduction)是Spring AOP的一个特性,允许在通知对象中声明并实现它们原本未实现的额外接口。通过`@DeclareParents`注解可以实现引介。 连接点(Joint Point)是程序执行过程中的特定点,通常在Spring AOP...

    SpringAop学习笔记以及实现Demo

    1. **经典代理模式Demo**:演示了如何通过CGLIB代理实现方法的拦截,以及在方法调用前后执行自定义操作。 2. **基于注解的AOP Demo**:展示了如何在切面类中使用注解定义通知,并在运行时自动织入切面。 3. **基于...

    Spring_Annotation_AOP

    在Spring中,AOP主要通过两种方式实现:基于XML配置和基于注解。随着Java注解的普及,越来越多的开发者倾向于使用注解来简化配置。在"Spring_0200_Annotation_AOP"中,我们重点关注的是注解驱动的AOP。 1. **@...

    spring aop实现原理

    NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927

Global site tag (gtag.js) - Google Analytics