2016-03-01 3 views
0

я реализую свой аспект класс в стиле Java:Как отключить AspectJ компиляцию с помощью конфигурации

@Aspect 
public class SomeAspect { 
    @Pointcut("...") 
    public void somePointcut() {} 

    @Around("somePointcut()") 
    public ... 
} 

Я новичок в AspectJ. Я хочу знать, есть ли удобный/централизованный способ управления эффективностью Pointcut, поэтому я могу включить/отключить их на основе некоторой конфигурации во время компиляции.

ответ

1

Во время времени выполнения вы можете использовать только 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 просто пропущено.
+0

спасибо, я постараюсь. – davidshen84

Смежные вопросы