2016-12-16 9 views
0

Я хотел бы включить AspectJ в свое приложение, чтобы понять, как он работает. I d нравится не использовать Spring AOP, а «чистый» aspectj.Начало работы с aspectj без Spring AOP

Вот что у меня есть:

<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjrt</artifactId> 
    <version>1.6.11</version> 
</dependency> 

И:

package tmp; 

import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut; 

@Aspect 
public class LoggingAspect { 

    @Pointcut("execution(* *.*(..))") 
    void anyMethodCall() { 
    } 

    @Before("anyMethodCall()") 
    public void beforeMethod() { 
     System.out.println("Aspect Before Method"); 
    } 
} 

Когда я исполняю мое приложение, сообщение не печатается.

Как я понимаю, beforeMethod следует вызывать перед любым методом любого класса во всем проекте.

Я предполагаю, что я что-то забыл, но еще не нашел хорошего учебника, где мне было ясно, как это работает.

Куда я могу обратиться сюда?

+0

Если вы только начинаете, пойдите с новейшей версией aspectj (1.8.9 на данный момент), а не с многолетней версией. –

ответ

1

В Eclipse, типа проекта должен быть изменен на проекте AspectJ (правой кнопкой мыши на project-> AspectJ)

Вам нужно в pom.xml

<dependencies> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
    </dependency> 
</dependencies> 
<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <configuration> 
       <complianceLevel>1.7</complianceLevel> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
         <goal>test-compile</goal> 
        </goals> 
       </execution> 
      </executions> 
      </plugin> 
      <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> 
      <plugin> 
       <groupId>org.eclipse.m2e</groupId> 
       <artifactId>lifecycle-mapping</artifactId> 
       <version>1.0.0</version> 
       <configuration> 
        <lifecycleMappingMetadata> 
         <pluginExecutions> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId> 
             org.codehaus.mojo 
            </groupId> 
            <artifactId> 
             aspectj-maven-plugin 
            </artifactId> 
            <versionRange> 
             [1.7,) 
            </versionRange> 
            <goals> 
             <goal>compile</goal> 
             <goal>test-compile</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <ignore></ignore> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 

    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

Изменить Pointcut на «! В (TMP. LoggingAspect) & & исполнение (* . (..)) "для избежания его ловить.

+0

Текущая версия плагина AspectJ Maven - 1,9. Он также работает в связи с Eclipse снова, в то время как у 1.8 была проблема, которая сделала его несовместимым с (повторным) импортом проектов в Eclipse. Поэтому больше не нужно использовать старый 1,7. – kriegaex

+0

Не могу ли я сделать это с помощью обычного проекта maven? Зачем мне нужно преобразовать его в проект aspectj? – user3629892

+0

@ user3629892 aspectj необходимо вызвать плетение логики после компиляции. ваш проект может быть проектом maven. но тип компиляции должен быть изменен. –

1

В моем документе IDEA он уже встроил плагин aspectj с версии 13. Следующим шагом, который вы должны сделать, является изменение настройки Java Compiler.

Project Setting –> Compiler –> Java Compiler 

«Использовать компиляцию»: перейти на Ajc;

«Путь к компилятору Ajc»: aspjectjtools.jar;

Если у вас нет банки, нажмите http://mvnrepository.com/artifact/org.aspectj, чтобы получить то, что вы хотите.

Теперь запустите свою программу, она будет работать. Удачи!