0 0

Spring2.5 AOP 前切入点 <aop:before.../> 如何应对不定个数参数的方法?5

我要在 com.test.service.*的所有方法上做一个前切入点(before),比如做前日志。

看了很多讲这个帖子和教程,被切入的方法,要么就是没有参数,要么就是一个(或固定几个)参数。

而实际中我的这些方法们,可能有不同个数参数,就是说有的方法是一个参数,有的方法是2个,有的3个。。。

我经过很多尝试都无法正确完成这个before切入,除非写成如下这样萎缩的样子:

public class BeforeLoggor{
  
    public void afterReturning(Object retVal) throws Throwable {  
        BeanUtil.dataDecrease(retVal);
    }  
    
    public void before0() throws Throwable {
    	int a=0;
    }  
    
    public void before1(Object arg0) throws Throwable {
    	int b=0;
    }  

    public void before2(Object arg0, Object arg1) throws Throwable {
    	int c=0;
    }

    public void before3(Object arg0, Object arg1, Object arg2) throws Throwable {
    	int d=0;
    }
}


<bean id="beforeLoggor" class="com.test.BeforeLoggor"/>
<aop:config>
  <aop:aspect ref="beforeLoggor">  
    <aop:before method="before" pointcut="execution(* com.test.service..*.*(..))"/>
    <aop:before method="before1" pointcut="execution(* com.test.service..*.*(..)) and args(arg0)"/>
    <aop:before method="before2" pointcut="execution(* com.test.service..*.*(..)) and args(arg0, arg1)"/>
   	        <aop:before method="before3" pointcut="execution(* com.test.service..*.*(..)) and args(arg0, arg1, arg2)"/>
        </aop:aspect>  
    </aop:config>  


如果我的方法,最多可能有10个参数,就得继续写下去!如果,有事先想象不到的参数个数,那就惨了!

我预留出100个!??

曾经试过 (Object... args)  (Object[] args) 均失败。

求教正统的写法!

(PS。不想要org.springframework.aop.framework.ProxyFactoryBean拦截的方式,因为我已经有一个拦截器了,再来一个太繁琐了)

另外,还有一个问题:

我之所以在另一个需求上用了拦截器,是要在方法开始之前做一个权限检查。
如果认证OK则继续执行被拦截的方法,如果NG则不让它进入方法,而是return

谁能告诉我一个AOP配置的方法,也能实现这样的需求呢?那样的话就不用在每一个Bean的配置中,事先指向拦截器,再target到实际Bean了。

换句话说,就是用<aop:before ... />的方式,能让他取得 MethodInvocation 类型的参数
2012年11月19日 12:03

2个答案 按时间排序 按投票排序

0 0

采纳的答案

直接用ProceedingJoinPoint.getgetArgs

2012年11月19日 12:08
0 0

我没怎么研究spring aop 但是你可以把参数定义为map 这样一个参数就够了

2012年11月19日 14:17

相关推荐

    spring aop的两种配置方式.docx

    在传统的Spring AOP配置中,我们通常会在`applicationContext.xml`或类似的配置文件中定义切面、通知(advice)、切入点(pointcut)等元素。以下是一个简单的示例: ```xml &lt;beans xmlns=...

    基于Spring的AOP快速实现通用日志打印(csdn)————程序.pdf

    `aop:before`和`aop:after`分别指定了在匹配的切入点之前和之后执行的方法。 一旦应用启动并执行`UserService`的相关操作,`TimeHandler`的`printBefore`和`printAfter`方法就会自动调用,从而在控制台输出相应的...

    spring aop注解方式、xml方式示例

    使用`&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:after-returning&gt;`、`&lt;aop:after-throwing&gt;`和`&lt;aop:around&gt;`元素定义不同类型的的通知,例如: ```xml &lt;aop:aspect id="loggingAspect" ref="loggingAspectBean"&gt; &lt;aop...

    SpringAOP依赖包

    3. 切入点(Pointcut):切入点是对连接点的精确定位,定义了何时应用切面。它可以是一个表达式,用于匹配特定的连接点。 4. 通知(Advice):通知是在特定连接点上执行的代码,也就是切面的行为。Spring AOP支持五...

    SpringAop xml方式配置通知

    3. 在配置AOP时,确保Spring容器已经启用AOP支持,即`&lt;aop:config&gt;`标签的存在。 通过上述XML配置,我们可以灵活地控制Spring AOP的各个元素,实现面向切面的编程,提升代码的可读性和可维护性。了解并熟练掌握这些...

    Spring_AOP开发

    /beans&gt;四、基于 XML 配置进行 AOP 开发:在 XML 文件中配置切面、通知、切入点等信息,例如:&lt;aop:config&gt;&lt;aop:aspect id="myInterceptor" ref="myInterceptorBean"&gt;&lt;aop:before method="doAccessCheck" pointcut=...

    XML配置SpringAOP共2页.pdf.zip

    XML配置Spring AOP是Spring框架中的一个重要组成部分,它允许我们通过XML配置来实现面向切面编程(Aspect-Oriented Programming, AOP)。AOP是一种编程范式,旨在将关注点分离,比如日志记录、事务管理等,这些都...

    spring aop 依赖jar

    总的来说,理解并正确配置Spring AOP的依赖,以及熟练掌握切面、通知和切入点的概念,对于有效利用Spring进行面向切面编程至关重要。通过这些技术,开发者可以将关注点分离,提高代码的可维护性和可复用性。

    Spring AOP配置源码

    &lt;aop:pointcut expression="execution(* com.spring.service..*(..))" id="pointCut"/&gt;声明一个切入点,注意execution表达式的写法 &lt;aop:before method="before" pointcut-ref="pointCut"/&gt; aop前置通知 &lt;aop:after ...

    Spring AOP依赖jar包

    &lt;aop:before method="logBefore" pointcut-ref="serviceMethods"/&gt; &lt;/aop:aspect&gt; &lt;/aop:config&gt; &lt;!-- 定义切面类 --&gt; &lt;bean id="loggingService" class="com.example.aspect.LoggingService"/&gt; &lt;/beans&gt; `...

    spring-aop.xsd

    例如,`aspect`元素用于定义一个切面,它包含`pointcut`子元素来定义切入点表达式,这个表达式可以匹配方法执行、构造器调用等特定的程序执行点。此外,`advice`元素定义了在切入点匹配时执行的行为,如`before`、`...

    springAOP.docx

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许开发者将关注点从核心业务逻辑中分离出来,实现代码的模块化和重用。本文将深入探讨Spring AOP的XML版本,包括如何配置、相关术语以及如何实现不同的...

    spring mvc框架下的aop例子

    1. 在`spring-common.xml`配置文件中,我们需要引入AOP相关的命名空间,并声明一个`&lt;aop:aspectj-autoproxy&gt;`元素。这会告诉Spring容器,我们要启用基于注解的AOP,并代理所有带有切面注解的bean。配置如下: ```...

    利用SPring AOP配置切面的一个例子

    3. **前置通知**:`&lt;aop:before&gt;`元素定义了前置通知,`method`属性指定了通知方法,`pointcut`属性指定了切入点表达式,该表达式用于匹配`DukePerformer`类的`perform`方法。 4. **后置通知**:`&lt;aop:after-...

    Spring aop的配置

    接下来,定义了两个通知:`before`通知用于在方法调用前执行`checkValidity`方法,而`after-returning`通知则在方法正常返回后执行`addLog`方法。 ##### 4. 测试代码 ```java package com.spring.aop; import org...

    spring的aop标签使用小程序

    在这个例子中,`execution(* com.example.service.*.*(..))`是切入点表达式,表示在`com.example.service`包下的所有类的所有方法执行前应用`logBefore`通知。 4. 配置扫描: 要使Spring识别带有`@Aspect`注解的...

    spring xml 实现aop切面编程

    `pointcut`元素定义了切入点表达式,这个表达式指定了哪些方法会在执行前后被我们的切面逻辑所拦截。 切入点表达式是AOP的核心,它使用一种称为Pointcut Design Pattern的语法。例如,`execution(* ...

    spring aop配置

    1. **声明式AOP**:通过XML或注解来定义切面(Aspect)、切入点(Pointcut)和通知(Advice)。这种方式非常灵活,适合大多数场景。 - XML配置示例: ```xml &lt;aop:config&gt; &lt;aop:aspect id="loggingAspect" ref=...

    springAop的配置实现

    - `&lt;aop:advisor&gt;`:定义通知和切入点的关联,指定何时何地执行通知。 - `&lt;aop:aspect&gt;`:定义切面,包括其通知和切入点。 - `&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:around&gt;`等:分别用于定义不同类型的通知。 **5....

    对Spring的AOP标签的支持

    4. `&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:around&gt;`、`&lt;aop:after-returning&gt;`、`&lt;aop:after-throwing&gt;`:这些标签分别定义了在目标方法执行前、执行后(无论是否抛出异常)、环绕执行、正常返回后和抛出异常后执行...

Global site tag (gtag.js) - Google Analytics