Spring 使用@Before(“args(name)”时出错

Spring 使用@Before(“args(name)”时出错,spring,Spring,我正在用Spring编写一个简单的AspectJ应用程序。我的Spring版本是4.1.4。当我运行代码时,会出现如下运行时错误: Exception in thread "main" java.lang.StackOverflowError at org.mehrdad.Aspect.LoggingAspect.stringArgumentMethods(LoggingAspect.java) at org.mehrdad.Aspect.LoggingAspect.string

我正在用Spring编写一个简单的AspectJ应用程序。我的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(){}
}
我的方面分类如下:

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")

如果您使用@Afterargsname,它将起作用,因为在调用函数之前不会设置name的值。

@vincent-此帖子已被标记为低质量,以供审阅。StackOverflow不鼓励只回答代码。我们更希望有一个完整的解释,包括OP哪里出了问题,以及为什么您提供的解决方案修复了它。请阅读