我该如何为内部类编写切入点表达式?

时间:2012-05-17 13:50:35

标签: java spring aop

我正在尝试使用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()方法。

非常感谢任何建议。

克里斯

1 个答案:

答案 0 :(得分:0)

我认为你使用的是AspectJ,Spring AOP没有任何可能性。

执行poincut限定类型是声明方法的类型

如果方法在该类中声明覆盖

execution(* com.example.dataservice.dao..*.*(..))将在类或内部类中选择包dao上的任何执行。继承是不够的。