我在项目中使用AspectJ。

@Aspect
Class FooAsspectj{
private static Logger log = LoggerFactory.getLogger(FooAsspectj.class);

@Pointcut("execution(* com.abc.Foo.getFoo(..))")
public void getFoo() { }

@Around("getFoo()")
public Object profileFoo(ProceedingJoinPoint pjp) throws Throwable {
    long start = System.currentTimeMillis();
    log.debug("Going to call the method.");
    Object output = pjp.proceed();
    log.debug("Method execution completed.");
    long elapsedTime = System.currentTimeMillis() - start;
    log.debug("Method execution time: " + elapsedTime + " milliseconds.");
    return output;

}


}

 Class Foo{

    public void getFoo(String abc){

System.out.println("Hello Foo");
    }


现在我有另一个类UseFoo,在其中自动装配Foo类

Class UseFoo{

@Autowired
    private Foo foo;

}


我在ApplicationContext.xml中输入了以下内容

<aop:aspectj-autoproxy />

<bean id="fooaspect" class="FooAsspectj" />


我出错了


  引起原因:org.springframework.beans.factory.BeanCreationException:
  创建名称为“ useFoo”的bean时出错:
  自动连接的依赖项注入失败;嵌套异常为
  org.springframework.beans.factory.BeanCreationException:无法
  自动连线栏位:私人Foo
  UseFoo.foo;
  嵌套异常为java.lang.IllegalArgumentException:无法设置
  富田
  UseFoo.foo来
  $代理56


如果我删除<bean id="fooaspect" class="FooAsspectj" />,它将正常工作。

最佳答案

这可以通过使用以下方法解决

 <aop:aspectj-autoproxy proxy-target-class="true"/>

07-25 23:54