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()のようなメソッドを一致させようとしています。
アドバイスをいただければ幸いです。
クリス