1

对于使用 Spring AOP 的独立 Java 应用程序,是否需要 JVM 参数,例如-javaagent:pathto/aspectjweaver.jar“打开”AOP 支持?您什么时候想要或需要这样做?

需要明确的是,“独立”是指 Maven 构建的、可执行的 .jar;这将在各种平台上调用。

4

4 回答 4

4

这取决于。如果您使用 Spring AOP 仅进行粗粒度拦截(意味着您只想拦截对 bean 的外部调用,但不拦截 bean 内部的调用),则根本不需要 JVM 参数。只需使用如下代码:

<bean id="myInterceptor" class="com.company.interceptors.MyInterceptor"></bean>

<aop:config>
    <aop:pointcut id="myPointcut"
        expression="execution(* com.company.services..MyService.*(..))" />

    <aop:advisor pointcut-ref="myPointcut"
        advice-ref="myInterceptor" />
</aop:config>

如果这还不够,并且您需要加载时编织来建议 bean 内调用,那么您需要添加一个 JVM 参数,如 Spring 3.0 文档中所述:

通用 Java 应用程序

您可以通过使用 Spring 提供的检测代理在任何 Java 应用程序(独立的以及基于应用程序服务器的)中启用 Spring 对 LTW 的支持。为此,请通过指定 -javaagent:path/to/spring-agent.jar 选项来启动 VM。请注意,这需要修改 VM 启动脚本,这可能会阻止您在应用程序服务器环境中使用它(取决于您的操作策略)。

见这里http://static.springsource.org/spring/docs/3.0.0.RC2/reference/html/ch07s08.html#aop-aj-ltw-environments

于 2012-06-13T18:34:20.317 回答
4

考虑通过 maven 使用编译时编织:

<properties>
    <aspectj.version>1.6.12</aspectj.version>
</properties>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.4</version>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
            </dependencies>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <complianceLevel>1.7</complianceLevel>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

这样做涵盖了所有疯狂的 Spring AOP 案例,甚至是私有事务方法。

于 2012-12-08T23:00:44.510 回答
1

在此处查看更多文档http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-aj-ltw。这取决于。

于 2012-06-13T18:20:26.370 回答
0

通常,只在类路径中包含 weaver jar 就足够了。

于 2012-06-13T17:12:34.023 回答