У меня есть требование перехватить определенный метод для API Apache POI (HSSFCell setCellValue
), и я планировал использовать Spring AspectJ для выполнения этого требования. Но после некоторого тестирования я обнаружил, что это не работает. Не уверены, что можно соткать внешнюю банку, как apache POI?
вот соответствующий код из моего pom.xml
:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.13</version>
</dependency>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11</version>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
<weaveDependencies>
<weaveDependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</weaveDependency>
</weaveDependencies>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
и мой аспектJ Java-класс:
@Aspect
@Component
public class TestInterceptor
{
@Pointcut("execution(* org.apache.poi..*.*(..))")
public void methodPointcut()
{
}
@Before("methodPointcut()")
public void Interceptor(JoinPoint joinPoint)
{
System.out.println("hello world");
}
}
По праву, когда я взаимодействую с API Apache POI (например, вызовите метод setCellValue
для HSSFCell
), он выведет hello world
на консоль, но в моем случае ничего не произошло.