Почему эта синтаксическая ошибка в SpringAOP @pointcut не выдает ошибку? - PullRequest
0 голосов
/ 20 ноября 2018

Я изучаю SpringAOP, в то время как я работаю с базовыми программами, я наблюдал странное поведение в eclipse (конечно, в компиляторе).

Во время практики над аннотацией @Pointcut я по ошибке добавил другие скобки в выражение Pointcut ..удивительно, я не получил никакой ошибки при запуске .. добавил, что это работает как шарм.Это даже не беспокоится о том, сколько круглых скобок я добавил в конце .. Если я изменяю любой другой синтаксис в этом выражении, появляется ошибка ..

вот синтаксическая ошибка ..

 @Pointcut("execution(* com.kish.DAO.*.*(..))))))") 
    public void forPointcut() {}

Я использовал ссылки на выражения pointcut для @Before Advices.

@Before("forPointcut()")
public void beforeAddAccountant() {
    System.out.println(" \n----->>>>>  exceuting @Before advice before adding accountant");
}


@Before("forPointcut()")
public void otherLoggers() {
    System.out.println("----->>>>> execution @Pointcut references before methods\n");

}

Может кто-нибудь сказать мне, что здесь происходит?

1 Ответ

0 голосов
/ 25 ноября 2018

Да, я могу.Синтаксический анализатор AspectJ pointcut здесь просто снисходительный, он такой простой.Это потому, что он должен использоваться компилятором AspectJ, и там у нас есть более тщательные проверки, приводящие к синтаксическим ошибкам.Однако при использовании Spring AOP дальнейшие проверки после синтаксического анализа не выполняются, поскольку байт-код не генерируется.В результате все после первой лишней закрывающей скобки просто сбрасывается, например,

execution(* *(..)))))) && !target(java.lang.String)

становится

execution(* *(..))

в Spring AOP.

Пожалуйста, попробуйте придерживатьсяправильный синтаксис в любом случае.

...