@Component
@Aspect
@Slf4j(topic = "e")
public class NotVeryUsefulAspect{
@Pointcut("within(com.lc.aop.for_source.service.impl.AAopServiceImpl)")
public void pointCutWithinAAopService(){
}
@Pointcut("@within(com.lc.aop.for_source.service.XAnnotation)")
public void pointCutAnnotation(){
}
@Before("pointCutWithinAAopService()")
@Order(0)
public void adviceBeforeAAopService(){
log.debug("=======before aop service======= = ");
}
@Before("pointCutAnnotation()")
@Order(-1)
public void adviceBeforeAAopService2(){
log.debug("=======before aop annotation======= = ");
}
}
@Slf4j(topic = "e")
@Component("a")
@XAnnotation
public class AAopServiceImpl implements AopService {
@Override
public void m() {
log.debug("a -AAopServiceImpl");
}
}
На основании советов-заказов
Рассмотрите возможность объединения таких методов-советов в один метод-совет для каждой точки соединения в каждом классе @Aspect или реорганизуйте советы в отдельные классы @Aspect, которые можно упорядочить на уровне аспекта с помощью Ordered или @Order.
Я правильно понимаю, что @Order в данном случае не работает? Почему бы не поддерживать порядок на уровне методов?
Я думаю, что это очень простая функция, но она может избежать некоторых ненужных недоразумений по поводу @Order
Я хотел бы заказать консультацию по уровню метода.
Этот вопрос, вероятно, следует задать парням, работающим над springframework, этот проект находится по адресу: https://github.com/spring-projects/spring-framework.
То, о чем вы просите, имеет смысл, но имейте в виду, что Order предназначен для определения приоритета загрузки bean-компонентов из контекста, поэтому имеет смысл, что Order нужно применять к Aspect, а не к самому Pointcut.
Ну, ответ на ваш вопрос находится в предложении непосредственно перед тем, которое вы цитируете, в том же абзаце того же информационного окна:
Когда две части одного и того же типа совета (например, два метода
@Afterсовета), определенные в одном и том же классе@Aspect, должны выполняться в одной и той же точке соединения, порядок не определен (поскольку нет способа получить объявление исходного кода). порядок через отражение для классов, скомпилированных с помощью javac).