0

AOPを使用して、データアクセスクラスのメソッドをプロファイリングしようとしています。簡略化すると、次のようになります。

package com.example.dataservices.dao;

public class DaoImpl extends AbstractDao implements Dao
{
    protected static abstract class CallbackHandler
    {
        abstract void processRow(final ResultSet rset);

        abstract DataPayload getPayload();

        boolean isCompanyPermitted(final Long companyId)
        {
            return true;
        }

        boolean isUserPermitted(final Long userId)
        {
            return true;
        }
    }

    protected static class CompanyCallbackHandler extends CallbackHandler
    {
        DataPayload payload;

        void processRow(final ResultSet rset)
        {
            if (isUserPermitted(rset.getlong(1))) {
                // do stuff
            }
        }

        DataPayload getPayload(final Long companyId)
        {
            this.payload = new DataPayload();
            // query the database
            return this.payload;
        }
    }

    public DataPayload getCompanyPayload(final Long companyId)
    {

        final CallbackHandler handler = new CompanyCallbackHandler();
        return handler.getPayload(companyId);
    }
}

私のポイントカット式は次のようになります。

@Pointcut( "execution(* com.example.dataservices.dao ..。 ..))")

ただし、この式はgetCompanyPayload()メソッドにのみ一致します。CompanyCallbackHandlerが親クラスCallbackHandlerから継承するisUserPermitted()のようなメソッドを一致させようとしています。

アドバイスをいただければ幸いです。

クリス

4

1 に答える 1

0

AspectJ を使用していると思いますが、Spring AOP には可能性がありません。

実行時の poincut 修飾型は、メソッドを宣言した型です。

execution(* com.example.dataservice.dao..*.*(..))メソッドがそのクラスで宣言 またはオーバーライドされている場合、クラスまたは内部クラスのパッケージ dao での実行を選択します。継承は十分ではありません。

于 2012-05-17T18:18:29.467 に答える