我正在用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());
}
}
我该如何解决这个问题?
答案 0 :(得分:0)
不是吗:
@Before(argNames="name")
答案 1 :(得分:0)
如果使用@After(“args(name)”),它将起作用,因为在调用函数之前不会设置name的值。