Aspectj :在现有 Web 应用程序中部署方面

Aspectj : deploying aspects in an existing web application

我正在开发一个使用 EJB3 的现有 Web 应用程序。我需要做的是将一些方面编织到这个应用程序中,以便在匹配某些特定方法后(在持久化 beans 之前和之后)记录一些信息。

我正在以 ear 格式在 Jboss 服务器中部署我的 Web 应用程序。 ear 包含一个 war(servlet)和一个 jar(会话 bean 和实体 bean)。

知道这怎么可能吗?我是否必须将方面放入 jar 中,还是必须创建一个新的 jar(专门用于方面)?

顺便说一句,我正在为这个项目使用 eclipse。所以我的jar对应一个EJB工程,我的war对应一个动态web工程

感谢您的回答

据我所知,对于网络应用程序,只有加载时织入才能做到这一点(不应与编译时织入混合,它们彼此不兼容)。为此,您应该执行以下操作:

  • 创建 aop.xmllink 文档说明如何操作)并将其放入项目的 META-INF 文件夹中。

  • aspectjweaver/tools/rt jar 添加到您的依赖项中。

  • 禁用编译时编织(这是您 pom.xml 中的一个配置。阅读更多 there

  • 将以下参数添加到您的应用程序服务器的 JVM -javaagent:pathto/aspectjweaver.jar (documentation)

  • aspectjweaver.jar 添加到服务器的资源中

就是这样。

你应该在你的 pom.xml 中禁用编译时编织(当然,如果你使用 maven)。不幸的是,我没有尝试在没有 Maven 的情况下这样做(仅使用 Eclipse AspectJ 插件)。这是它可能的样子。

<build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.7</version>
                <configuration>
                    <!-- disabling -->
                    <outxml>true</outxml>
                    <XterminateAfterCompilation>true</XterminateAfterCompilation>
                    <!-- disabling -->
                </configuration>
                <executions>
                    <execution>
                        <id>compile</id>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
  </build>