Без пружины вы можете использовать чистый AspectJ:
Demo.java: пример метода, который мы хотим изменить
public class Demo {
public String boom(String base) {
return base;
}
}
DemoAspect.aj: файл конфигурации. Начало работы .В AspectJ pointcuts выбирают определенные точки соединения в потоке программы.Для реализации сквозного поведения мы используем совет. Совет объединяет pointcut (для выбора точек соединения) и тело кода (для запуска в каждой из этих точек соединения): до, вокруг, после ...
public aspect DemoAspect {
pointcut callBoom(String base, Demo demo) :
call(String Demo.boom(String)) && args(base) && target(demo);
String around(String base, Demo demo) : callBoom(base, demo){
if ("detonate".equals(base)) {
return "boom!";
} else {
return proceed(base, demo);
}
}
}
DemoTest.java
public class DemoTest {
@Test
void name() {
Demo demo = new Demo();
assertEquals("boom!", demo.boom("detonate"));
assertEquals("fake", demo.boom("fake"));
}
}
Добавьте зависимости в pom.xml
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.13</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
И плагин, обратите внимание на версии.Например, плагин 1.11 ожидает библиотеки 1.8.13.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11</version>
<configuration>
<complianceLevel>1.8</complianceLevel>
<source>1.8</source>
<target>1.8</target>
<showWeaveInfo>true</showWeaveInfo>
<verbose>true</verbose>
<Xlint>ignore</Xlint>
<encoding>UTF-8 </encoding>
</configuration>
<executions>
<execution>
<goals>
<!-- use this goal to weave all your main classes -->
<goal>compile</goal>
<!-- use this goal to weave all your test classes -->
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
Хороший пример с более подробной информацией, Baeldung . Официальная документация .