aspectj-load-time-weaving-example , aspectj-maven-plugin 在 eclipse 報錯
在 marketspace 找 AJDT tool 套件安裝
參考專案
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>aspectj-ltw-example</artifactId>
<version>1.0-SNAPSHOT</version>
<name>AspectJ Load Time Weaving Example Project</name>
<description>
A basic project with AspectJ Load Time Weaving.
</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<aspectj.version>1.8.13</aspectj.version>
<aspectjweaver.version>1.8.13</aspectjweaver.version>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11</version>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
<source>1.8</source>
<target>1.8</target>
<Xlint>ignore</Xlint>
<complianceLevel>1.8</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<!-- IMPORTANT -->
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<argLine>-XX:-UseSplitVerifier</argLine>
<argLine>-javaagent:${user.home}/.m2/repository/org/aspectj/aspectjweaver/${aspectjweaver.version}/aspectjweaver-${aspectjweaver.version}.jar</argLine>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/kernel -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.2.0</version>
</dependency>
</dependencies>
</project>
aop.xml
<aspectj>
<aspects>
<!-- Aspects -->
<aspect name="com.example.aspectj.DateTimeToStringAspect"/>
<aspect name="com.example.aspectj.PdfWriterToSaveAspect"/>
</aspects>
<weaver options="-verbose -showWeaveInfo">
<include within="org.joda.time.base.AbstractDateTime"/>
<include within="com.itextpdf.io.source.OutputStream"/>
</weaver>
</aspectj>
PdfWriterToSaveAspect.java
package com.example.aspectj;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class PdfWriterToSaveAspect {
@Pointcut("execution(* com.itextpdf.io.source.OutputStream.close())")
public void writerToClose() {
}
@Around("writerToClose()")
public void toLowerCase(ProceedingJoinPoint joinPoint) throws Throwable {
joinPoint.proceed();
System.out.println("PdfWriter#toClose() has been invoked: " );
}
}
PdfWriterToSaveAspectTest.java
package com.example.aspectj;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.junit.Test;
import com.itextpdf.kernel.pdf.PdfWriter;
public class PdfWriterToSaveAspectTest {
@Test
public void testPdfWriterToSaveTest() throws Exception {
String dest = "D:/helloWorld.pdf";
PdfWriter writer = new PdfWriter(dest);
writer.close();
File file = new File(dest);
assertTrue(file.exists());
if (file.exists()) {
file.delete();
}
}
}
console
Running com.example.aspectj.PdfWriterToSaveAspectTest [AppClassLoader@18b4aac2] weaveinfo Join point 'method-execution(void com.itextpdf.io.source.OutputStream.close())' in Type 'com.itextpdf.io.source.OutputStream' (OutputStream.java:112) advised by around advice from 'com.example.aspectj.PdfWriterToSaveAspect' (PdfWriterToSaveAspect.java) PdfWriter#toClose() has been invoked: Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec
AspecJ 在執行時期編織,再說不能攔截的,請給我十瓶小米酒...