Spring AOP, pointcut expressions: аннотации с определенными парами
У меня есть Aspect
класс с методом clear()
.
@Aspect
public class Clear
{
@After("@annotation(org.springframework.transaction.annotation.Transactional)")
public void clear()
{
// do smth
}
}
Теперь я хочу вызывать этот аспект после каждого выполнения метода с аннотацией @Transactional
с readOnly = true
как
@Transactional(readOnly = true)
public void someMethod()
{
//...
}
Есть ли способ сделать это без пользовательских аннотаций?
1 ответ:
Я думаю, что вы довольно близки.
В вашем методе
clear
Вы должны взять параметр типаJoinPoint
. Этот параметр будет автоматически заполнен Spring во время выполнения, и с его помощью вы можете получить подробную информацию о вашей конкретной точке соединения, включаяjava.lang.reflect.Method
, которая будет содержать аннотацию, которую вы ищете.Я думаю примерно так:
@Aspect public class Clear { @After("@annotation(org.springframework.transaction.annotation.Transactional)") public void clear(final JoinPoint joinPoint) { final Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); final Transactional txAnnotation = methood.getAnnotation(Transactional.class); final boolean isReadOnly = txAnnotation.readOnly(); //do conditional work based on isReadOnly } }