#aop #aspectj #pointcut
#aop #аспект j #точечные сокращения #aspectj
Вопрос:
Я должен обеспечить соблюдение политики, выдающей предупреждение, если добавляются элементы, не принадлежащие к определенной категории, кроме трех, которые разрешены и запрещают такие добавления…..
Пока я могу найти элементы и выдать предупреждение …. но не уверен, как остановить их добавление….
Например.
Разрешенные категории обуви и носков
но если я попытаюсь добавить овощной товар в инвентарь, он должен выдать мне предупреждение о том, что «категория не разрешена .. / нИтем не будет добавлен в инвентарь» ….. а затем перейти к следующему товару….
Это то, что я написал до сих пор…..
pointcut deliverMessage() :
call(* SC.addItem(..));
pointcut interestingCalls(String category) :
call(Item.new(..)) amp;amp; args(*, *, category);
before(String category): interestingCalls(category) {
if(category.equals("Socks")) {
System.out.println("category detect: " category);
else if(category.equals("Shoes"))
System.out.println("category detect: " category);
else {
check=true;
System.out.println("please check category " category);
}
}
Ответ №1:
Почему бы вместо этого не использовать around
аспект. Затем, если они не относятся к нужной категории, вы не переходите к этому методу, поэтому он пропускается, если пропущенный метод просто выполняет добавление.
Обновить:
Вот пример из AspectJ в действии, опубликованный Manning Publication.
public aspect ProfilingAspect {
pointcut publicOperation() : execution(public * *.*(..));
Object around() : publicOperation() {
long start = System.nanoTime();
Object ret = proceed();
long end = System.nanoTime();
System.out.println(thisJoinPointStaticPart.getSignature()
" took " (end-start) " nanoseconds");
return ret;
}
}
Итак, если вы хотите проверить, следует ли вам добавлять элемент, если это разрешенная категория, тогда просто вызовите proceed
, в противном случае вы бы просто вернули значение null, возможно.