如何在Play框架中使用jcabi-aspects

时间:2013-09-10 18:53:51

标签: logging playframework aop aspectj jcabi

我在Play中找不到任何jcabi-aspects的例子!应用

这是我的Build.scala文件

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

  val appName         = "test-for-fun"
  val appVersion      = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    // Add your project dependencies here,
    "com.jcabi" % "jcabi-aspects" % "1.0-SNAPSHOT",
    "org.aspectj" % "aspectjrt" % "1.6.12" % "runtime",
    javaCore,
    javaJdbc,
    javaEbean
  )

  val main = play.Project(appName, appVersion, appDependencies).settings(
    resolvers += "oss.sonatype.org" at "https://oss.sonatype.org/content/repositories/snapshots/" 
  )

}

以下是我致电@Loggable

的方式
package controllers;

import play.*;
import play.mvc.*;
import com.jcabi.aspects.Loggable;

import views.html.*;

public class Application extends Controller {
    @Loggable(Loggable.INFO)
    public static Result index() {
        return ok(index.render("Your new application is ready."));
    }

}

如果您能提供任何提示,欢迎您。

我的主要目标是使用AOP执行日志记录,如果您知道使用Play的其他方式!你也受到欢迎。

由于

1 个答案:

答案 0 :(得分:2)

我今天实际上正在研究同样的事情,并使用我的scala项目(使用SBT,虽然我已经通过intellij运行了东西)。我认为你将不得不做一些事情:

  1. 如上所述here,您要为正在运行的任何java命令添加-javaagent:〜/ path-to / aspectjweaver.jar。有关如何为播放项目添加javaagent标志的示例,请参阅here

  2. 包含一些额外的依赖项:

    libraryDependencies + =" org.aspectj" %" aspectjweaver" %" 1.7.2"

    libraryDependencies + =" org.aspectj" %" aspectjrt" %" 1.7.2"

    libraryDependencies + =" com.jcabi" %" jcabi-aspects" %" 0.8"

    libraryDependencies + =" com.jcabi" %" jcabi-log" %" 0.8"

  3. 在项目的资源文件夹中创建META-INF / aop.xml。这就是为aspectj定义运行时编织的原因。有关示例,请参阅this gist

  4. 将MethodLogger类从jcabi-aspects v0.8(和Mnemos.java和NamedThreads.java)复制到com.yourcompany.yourpackage中。这个(据我所知)的原因是jcabi包是以特殊的方式编译的,我们想要进行运行时编织,所以这就解决了这个问题。编辑:也许这是因为我使用Java 7并且插件是用Java 6编译的 - 我在SBT中构建时会看到一些警告。

  5. 我很高兴听到有人有更好的方法,但这至少似乎有效。