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: Could not autowire field: private Foo UseFoo.foo; です。ネストされた例外は java.lang.IllegalArgumentException: Foo フィールド UseFoo.foo を $Proxy56 に設定できません

削除すると正常に<bean id="fooaspect" class="FooAsspectj" />動作します。

4

1 に答える 1

4

これは、次を使用して解決されます

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