我正在尝试使用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()方法。
非常感谢任何建议。
克里斯
答案 0 :(得分:0)
我认为你使用的是AspectJ,Spring AOP没有任何可能性。
执行poincut限定类型是声明方法的类型
如果方法在该类中声明或覆盖, execution(* com.example.dataservice.dao..*.*(..))
将在类或内部类中选择包dao上的任何执行。继承是不够的。