Новые для аспектно-ориентированного развития.Аспект аннотации ссылки
2 часть вопрос подходит.
Есть ли у вас хорошие сайты, содержащие учебник и код, который работает? До сих пор я видел много учебников, но с фрагментированным кодом, и я ничего не могу собрать вместе, чтобы он работал локально.
Im пытается создать фреймворк с аспектом и классом aspectj, который должен перехватывать все вызовы методов, которые аннотируются с аспектом. Он отлично работает в моем локальном проекте, но когда я пытаюсь использовать этот аспект в другом проекте, он, похоже, не работает. Пример
Код: Аспект перехватчик
@Aspect
public class InterceptCallAspect {
@Around("execution(* *(@InterceptCall (*)));")
public void record(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
//Before
System.out.println("Before");
proceedingJoinPoint.proceed();
System.out.println("After");
//After
}
}
Аспект
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface InterceptAspectAnnotation {
}
Так что, когда я аннотировать мой TestCase в моем проекте я получаю SYSOUT в нужных местах. Но когда я создаю свою банку и собираю ее в другом проекте, она ничего не делает.
Мой ПОМ файл:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<artifactId>InterceptCall</artifactId>
<groupId>testing</groupId>
<packaging>jar</packaging>
<version>0.0.2-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<complianceLevel>1.8</complianceLevel>
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Хм, я хочу, чтобы создать общую библиотеку с аспектами, которые должны быть доступны для любого проект. Итак, если вы правы (нужно проверить это), это означает, что любой проект, который хочет использовать мою фреймворк, должен иметь тег aspectLibraries в своем проекте maven? И если они используют groovy или ant что-то похожее для их скрипта сборки. – Nosfert
Да, независимо от сценария сборки, AspectJ должен знать, какие аспекты использовать для плетения. Он может подобрать все, что является частью кода проекта, любым способом, но если он приходит как библиотека, это не так. Следовательно, тег aspectLibraries. – sheltem
http://www.github.com/abrovinc/methodmock Так я и ходил. – Nosfert