У меня есть:
- 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"