使用 @Before("args(name)") 时出错



我正在编写一个简单的AspectJ应用程序 Spring.My Spring 版本是 4.1.4。当我运行代码时,我收到此运行时错误,如下所示:

Exception in thread "main" java.lang.StackOverflowError
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)
    at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java)

我的方面课程如下:

package org.mehrdad.Aspect;
import org.aopalliance.intercept.Joinpoint;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.mehrdad.model.Circle;

@Aspect
public class LoggingAspect {

    @Before("allCircleMethods()")
    public void LoggingAdvice(JoinPoint jp)
    {

    }

    @Before("args(name)")
    public void stringArgumentMethods(String name)
    {
        System.out.println("Name " + name);
    }

    @Pointcut("execution(* get*())")
    public void allGetters(){}
    @Pointcut("within(org.mehrdad.model.Circle)")
    public void allCircleMethods(){}
}

主要功能是:

package org.mehrdad.AOPSpring;
import org.mehrdad.Service.ShapeService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class AopMain {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
                ShapeService shapeService = context.getBean("shapeservice", ShapeService.class);
                shapeService.getCircle().setName("AHAHAHA");
                System.out.println(shapeService.getCircle().getName());
            }
        }

我该如何解决这个问题?

不是

吗:

@Before(argNames="name")

如果你使用@After("args(name)"),它将起作用,因为在调用函数之前不会设置name的值。

最新更新