Да, вы можете. Я не знаком с синтаксисом, который вы используете в настоящее время. Но с AspectJ было бы что-то вроде:
public aspect InterceptStringBuilders {
StringBuilder around(StringBuilder target) :
call(public StringBuilder append(String)) &&
!within(InterceptStringBuilders) &&
target(target)
{
if(target.length() == 0)
{
target.append("!!");
}
else if(target.length() == 1 || target.charAt(0) != '!' || target.charAt(1) != '!')
{
target.insert(0, "!!");
}
return proceed(target);
}
}
Точка соединения - public StringBuilder append(String)
, и вам нужен pointcut target
, чтобы выставить StringBuilder, чтобы вы могли принудительно установить, что он начинается с "!!". Кроме того, вам также понадобится pointcut !within(interceptStringBuilders)
, чтобы гарантировать, что вы не перехватывает вызовы Stringbuilder из самого аспекта.
Я полагаю, что синтаксис, который вы используете, будет примерно таким:
"call(public StringBuilder append(String) && !within(LoggingAspect) && target(StringBuilder)"