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("执行(* com.example.dataservices.dao.. ( ..))")

但是这个表达式只匹配 getCompanyPayload() 方法。我正在尝试匹配 CompanyCallbackHandler 从其父类 CallbackHandler 继承的 isUserPermitted() 等方法。

任何建议将不胜感激。

克里斯

4

1 回答 1

0

我假设您正在使用 AspectJ,而 Spring AOP 没有任何可能性。

在执行切入点,限定类型是声明方法的类型,所以

execution(* com.example.dataservice.dao..*.*(..))如果在该类中声明覆盖该方法,则将在类或内部类中的包 dao 上选择任何执行。继承是不够的。

于 2012-05-17T18:18:29.467 回答