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

时间:2015-01-22 14:47:35

标签: 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.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)

我的Aspect类如下:

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());
            }

        }

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

不是吗:

@Before(argNames="name")

答案 1 :(得分:0)

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