2

我在我的项目中使用 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: Can not set Foo field UseFoo.foo to $Proxy56

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

4

1 回答 1

4

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

 <aop:aspectj-autoproxy proxy-target-class="true"/>
于 2012-11-30T10:05:59.527 回答