Как настроить использование аспекта в приложении scala play - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть:

  • SBT версия 1.3.8
  • Play Framework 7.1
  • Scala 2.12.3

Я хочу использовать AOP в Play. Я попытался:

import org.aspectj.lang.ProceedingJoinPoint
import org.aspectj.lang.annotation.Around
import org.aspectj.lang.annotation.Aspect
import org.slf4j.LoggerFactory

@Aspect
class AnnotationBasedAspect {
  /**
   * around execution of Sum
   */
  @Around("execution(@aop1.Loggable * *.*(..))")
  def aroundSum(joinPoint: ProceedingJoinPoint): Object = {
    val result = joinPoint.proceed
    println("Method:-" + joinPoint.toShortString() + " Input:-" + joinPoint.getArgs().toList.mkString(",") + " Result:-" + result)
    result
  }
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface Loggable {}
class Sum {
   @Loggable
   def checkSum(a: Int, b: Int): Int = a + b
}
object AopMain {
  def main(args:Array[String]){
    val sum = new Sum().checkSum(1, 2)
    println("sum is---"+sum)
  }
}

Я получаю сумму, но Аспекты не применяются.

Я что-то пропустил?

Добавил это в plugins.sbt :

addSbtPlugin("com.github.nstojiljkovic" % "sbt-aspectj-runner-play-2.7" % "1.2.3")

И использовал это в build.sbt :

libraryDependencies += "org.codehaus.mojo" % "aspectj-maven-plugin" % "1.11" 
...