Это зависит от того, какой стиль АОП вы выбираете с помощью Spring. Если вы придерживаетесь подхода, основанного на аннотациях, вы можете получить немногое, кроме наличия констант для выражений, находящихся в классе экстентов.
Это связано с тем, что стиль AOP на основе аннотаций @Aspect посвящен colocate , где и what . Вы можете каким-то образом получить некоторую настраиваемость, используя абстрактный метод и привязав к нему pointcut.
@Aspect
public abstract class MyAspect {
protected abstract pointcut();
@Before("pointcut()")
public void myAdviceMethod() {
// Advice code goes here
}
}
public class ConcreteAspect extends MyAspect {
@Pointcut("execution(* com.acme.*.*(..))")
protected pointcut() {
)
}
Это возможно, но мне кажется довольно неловким, поскольку разработчик должен знать, что для метода @Pointcut
требуется . Если она забудет разместить ее, она полностью рухнет.
Если вам нужна гибкость, чтобы разделить рекомендации и pointcut, вам лучше придерживаться конфигурации на основе XML (см., Например, Документация Spring ).
Вид человека посередине - это возможность привязать ваш pointcut к пользовательской аннотации и позволить пользователям решать, где разместить его и, следовательно, когда применять ваш совет. Документация Spring (глава 6.2.3.4) дает дополнительную информацию об этом.
С уважением,
Олли