Во время времени выполнения вы можете использовать только if()
pointcut, но я знаю, что это не то, что вы хотите.
время компиляции все зависит от того, как вы строите проект. Я собираюсь предположить, что вы используете Maven и AspectJ Maven Plugin.
Предположим далее, что вы настроить плагин для запуска в process-sources
фазе, как это:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.8</version>
<configuration>
<!--<showWeaveInfo>true</showWeaveInfo>-->
<source>${java.source-target.version}</source>
<target>${java.source-target.version}</target>
<Xlint>ignore</Xlint>
<complianceLevel>${java.source-target.version}</complianceLevel>
<encoding>${project.build.sourceEncoding}</encoding>
<!--<verbose>true</verbose>-->
<!--<warn>constructorName,packageDefaultMethod,deprecation,maskedCatchBlocks,unusedLocals,unusedArguments,unusedImport</warn>-->
</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>
Затем просто добавить профиль Maven - назовем его skip-aspectj
которая переписывает фазы к ни через <phase/>
:
<profiles>
<profile>
<id>skip-aspectj</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
<execution>
<phase/>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Теперь, если вы запустите ваш Maven построить
- как правило, аспекты скомпилированы и применены,
- с
mvn -P skip-aspectj ...
они будут неактивными и все исполнение AspectJ Maven просто пропущено.
спасибо, я постараюсь. – davidshen84