我试图让 AspectJ 在现有项目中工作(实际上我对那个项目了解不多,因为它似乎不重要)。
我们决定使用加载时间编织来避免使用ajc
因为我是 AspectJ 的新手,所以我首先创建了一个带有一些类和日志方面的示例项目:
@Aspect
public class LoggingAspect {
@Pointcut("call(public de.test.beans.IPerson+.*(..))")
public void logExecutions(JoinPoint jp) {}
@Before("logExecutions(jp)")
public void beforeExecutions(JoinPoint jp) {
BeforeExecutionLog log = new BeforeExecutionLog(jp);
System.out.println(log);
}
@AfterReturning(pointcut = "logExecutions(jp)", returning = "ret")
public void afterExecutions(JoinPoint jp, Object ret) {
AfterExecutionLog log = new AfterExecutionLog(jp, ret);
System.out.println(log);
}
}
它工作正常,一切都很好。
作为下一步,我尝试将 AspectJ 和 Maven 一起使用。我只是稍微改变了日志方面(只是包)。
根据“AspectJ in Action”一书中的代码,我修改了我们的 maven pom.xml
<dependencies>
...
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.12.M1</version>
</dependency>
</dependencies>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</execution>
</executions>
</plugin>
但是如果尝试调用mvn clean install我会得到数千个错误,第一个是:
[ERROR] Syntax error on token "call(public xxx.yyy.zzz.api.Service+.*(..))", "name pattern" expected
[ERROR] Method annotated with @Pointcut() for abstract pointcut must be abstract
还有以下错误:
[ERROR] The method xyz() of type zyx must override a superclass method
我想这些都是受我方面影响的方法。
谁能解释我,怎么了?
先感谢您
升级版:
我更新了我的问题。