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 在執行時期編織,再說不能攔截的,請給我十瓶小米酒...