2

別のクラスから特定のメソッドが呼び出されたときにメソッドをトリガーしたいので、@Pointcut を使用することを考えました。

以下のコードは、私がコーディングしているものとほぼ同じであり、他に追加する必要はありません。

public class OrgManagerImpl implements OrgManager {
    public IOrg getOrg(String orgShortName) {
    }
}

これがトリガーされるクラスです。

@Aspect
public class OrgManagerSynchronizer { 

    @Pointcut("execution(* com.alvin.OrgManager.getOrg(..))")
    public void classMethods() {}

    @Before("classMethods()")
    public void synchronize(JoinPoint jp) {
        //code should be executed. but does not execute.
    }
}

そして私の.xmlでこれが指定されました:

aop:aspectj-autoproxy

さらに何を追加すればよいですか?次はどうする?

4

2 に答える 2

0

以下のことを確認してください。

1)OrgManagerImplがコンテキストxmlでBeanとして検出されているか、またはお持ちのコンテキストxmlまたはそのクラスのパッケージで@ Component&としてマークされているかどうかを確認します。

2)上記が正しい場合は、以下のようにポイントカットを変更してみてください

@Pointcut("execution(* get*(..))")

このポイントカットは、すべてのgetメソッドをインターセプトします。この時点で、同期メソッドが機能しているかどうかを確認してください。それが機能する場合は、少なくともスプリング構成は問題ありません。ポイントカットの表現を洗練する必要があります。ただし、これも機能しない場合は、Spring aop構成自体に問題があるため、それらに集中できます。

また、これが機能しない場合は、コンテキストxml、BeanJavaクラスなどの情報を提供してみてください。

于 2012-10-23T09:17:13.583 に答える