2012-11-30 187 views
2

我在我的項目中使用了AspectJ。Spring AOP Autowiring異常

@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" /> 
提出以下條目

我收到了e RROR

造成的:org.springframework.beans.factory.BeanCreationException: 錯誤創建名爲 'useFoo' 豆: 注射自動裝配依賴的失敗;嵌套的異常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:private Foo UseFoo.foo; 嵌套的例外是java.lang.IllegalArgumentException異常:無法設置 富場 UseFoo.foo到 $ Proxy56

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

回答

4

這是通過使用以下

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