Pointcut для расширенных методов класса с Aspectj - PullRequest
0 голосов
/ 20 марта 2020

В мою помпу добавлена ​​следующая зависимость. xml

        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.5</version>
        </dependency>

У меня был контроллер, расширяющий абстрактный контроллер

// actual controller
@RestController
@RequestMapping("/testContoller/v1")
class TestController: AbstractTestController()


// abstract class
abstract class AbstractTestController {
    @GetMapping("/test")
    fun testFunction():String {
        return "hello"
    } 
}

Класс аспектов

@Aspect
@Configuration
class TestAspect {
    @Around(
        "execution(* com.test.project.controllers.TestController.*(..) )"
    )
    fun testIntercept(joinPoint: ProceedingJoinPoint): Any? {
        return joinPoint.proceed()
    }
}

Теперь я хочу создать pointcut для всех выполнений метода на AbstractTestContoller через TestController. Как мне это сделать?

Я пробовал:

"execution(* com.test.project.controllers.TestController.*(..) )"
"execution(* com.test.project.controllers.TestController+.*(..) )"
"execution(* com.test.project.controllers.AbstractTestController.*(..) )"
"execution(* com.test.project.controllers.AbstractTestController+.*(..) )"


"within(com.test.project.controllers.TestController)"
"within(com.test.project.controllers.TestController+)"
"within(com.test.project.controllers.AbstractTestController)"
"within(com.test.project.controllers.AbstractTestController+)"

Ни одна из этих работ

1 Ответ

1 голос
/ 20 марта 2020

AspectJ

Добавление ткача AspectJ в ваш проект Maven будет иметь нулевой эффект, если вы не выполните одно из следующих действий:

  • добавьте плагин AspectJ Maven для фактического создания компилятор AspectJ объединяет ваши аспекты с целевыми классами ИЛИ
  • запускает Java с таким ткацким агентом AspectJ, как -javaagent:/my/path/aspectjweaver.jar.

Spring AOP

Second возможность: вы на самом деле не используете AspectJ, как вам кажется, вы просто используете платформу «AOP lite» под названием Spring AOP, которая настроена совершенно по-другому. Поэтому, если вы не предоставите полный MCVE в своем обновленном вопросе или в проекте GitHub, никто не сможет точно сказать вам, что вы сделали неправильно.

Независимо от того, используете ли вы AspectJ или Spring AOP, в обоих случаях я предлагаю вам сначала прочитать некоторую документацию.

Обновление: Ваш @Aspect для Spring AOP должен быть @Component, а не @Configuration. Пожалуйста, поместите последний в отдельный класс и на самом деле также настройте что-то там.

...