Я пытаюсь создать pointcut для абстрактного метода, реализованного в дочернем классе, но AOP никогда не вызывается.
Вот мой минимальный код Java:
package com.example;
public class Service {
private ParentAbstractClass clazz;
public Service(ParentAbstractClass clazz) {
this.clazz = clazz;
}
public void process() {
clazz.method();
}
}
Этоэто класс обслуживания, в котором есть абстракция класса для внедрения, и он вызывает метод.
Мой абстрактный класс, который имеет некоторую общую логику и специфический для реализации код, который является абстрактным методом.
package com.example;
import java.util.List;
public abstract class ParentAbstractClass {
public void method() {
abstractMethod(List.of("test"));
}
public abstract void abstractMethod(List<String> names);
}
Это класс, обеспечивающий реализацию абстрактного метода.
package com.example;
import java.util.List;
public class ConcreteClass extends ParentAbstractClass {
@Override
public void abstractMethod(List<String> names) {
System.out.println("Look up! AOP should have executed");
}
}
В этой настройке я использую Spring XML для настройки моих bean-компонентов.
<bean id = "clazz" class="com.example.ConcreteClass"/>
<bean id="myservice" class="com.example.Service">
<constructor-arg ref="clazz"/>
</bean>
<bean id = "aspect" class="com.exmple.TxAspect"/>
<aop:config>
<aop:aspect id="mergeEnableAspect" ref="aspect">
<aop:pointcut id="mergeServicePointCut"
expression="execution(* com.example.ConcreteClass.abstractMethod(..))"/>
<aop:around pointcut-ref="mergeServicePointCut" method="test" arg-names="pjp"/>
</aop:aspect>
</aop:config>
Инаконец, класс AOP:
import org.aspectj.lang.ProceedingJoinPoint;
public class TxAspect {
public void test(ProceedingJoinPoint pjp) {
System.out.println("I am not going to do anything");
}
}
В моем abstractMethod
я делаю что-то, что носит транзакционный характер, и у меня есть бизнес-потребность контролировать транзакции вручную, но Мой аспектный класс никогда не вызывается.Может кто-нибудь, пожалуйста, помогите мне выяснить, какую ошибку я совершил.
Спасибо.