class CommonEntity { public void add(CommonEntity ce) {} public void remove(CommonEntity ce) {} } class ManageEntity { ManageEntity(CommonEntity ce) { } } abstract aspect Y { abstract pointcut entityAccessor(CommonEntity entity); before(CommonEntity entity): entityAccessor(entity) {} } aspect X extends Y { public pointcut entityAccessor1(CommonEntity entity) : (execution(* CommonEntity+.add*(CommonEntity+)) || (execution(* CommonEntity+.remove*(CommonEntity+)))) && within(CommonEntity+) && args(entity) && if(entity != null); public pointcut entityAccessor2(CommonEntity entity) : execution(ManageEntity.new(CommonEntity+, ..)) && within(ManageEntity) && args(entity, ..) && if(entity != null); public pointcut entityAccessor(CommonEntity entity) : entityAccessor1(entity) || entityAccessor2(entity); }