Java + Spring + Maven - AspectJ实现而不是SpringAOP

时间:2014-10-28 17:53:05

标签: java spring maven aspectj aspectj-maven-plugin

Java + Spring + Maven应用程序:

有人可以在没有基于代理的Spring AOP的情况下为我提供链接或建议纯粹的AspectJ实现吗?

我的应用程序纯粹是基于Spring + Maven。我目前使用Spring AOP实现了一些方面,而这些方面并没有解决我的问题。

如果我尝试在同一private method2()内的public method1()内访问class A,则不支持。

我想知道: 1)如何使用支持类内方法调用的切入点编写aspectj? 2)如何使用AspectJ加载时编织将其配置到我当前的Spring,maven项目中? 3)如何在Tomcat服务器+ eclipse中配置AspectJ Maven插件进行编译时编织。

@Controller
class A {
    public void method1() {
        method2("foo");
    }

    private String method2(String text) {
        return text;
    }
}

预期产出:

log.entering(method1)
log.entering(method2)
print abc
log.exiting(method2)
log.exiting(method1)

2 个答案:

答案 0 :(得分:0)

我建议您使用Spring Roo创建一个虚拟项目(这样您就可以看到Maven pom.xml和Spring applicationContext.xml文件的外观)并下载正确设置了AspectJ的Eclipse的Spring STS版本。

答案 1 :(得分:0)

您可以通过右键单击 - 配置 - 转换为AspectJ项目将Maven项目转换为AspectJ项目,从而一起使用Maven和AspectJ项目。从那里,您可以使用注释创建没有注释的Aspect类或Aspect类的Java类。

至于你想要的结果,你可以使用如下的Around方法:

    @Around("execution ( * A.method1(..))")
    public void captureMethodOne(ProceedingJoinPoint joinPoint) throws Throwable{
    System.out.println("log.entering(method1)");
    joinPoint.proceed();
    System.out.println("log.exiting(method1)");
    }

另外不要忘记在pom.xml中输入aspectj和aspectj maven插件,例如

<properties>
    <maven.compiler.plugin.version>3.5.1</maven.compiler.plugin.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.7</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.8</version>
    </dependency>
</dependencies>


<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.8</version>
            <configuration>
                <complianceLevel>1.8</complianceLevel>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.plugin.version}</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

    </plugins>
</build>

希望它有所帮助。 PS首先检查AspectJ教程,在互联网上充实。