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)
答案 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教程,在互联网上充实。