Почему Spring не поддерживает порядок рекомендаций по аннотациям на уровне метода?

@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

Я хотел бы заказать консультацию по уровню метода.

1
0
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Этот вопрос, вероятно, следует задать парням, работающим над springframework, этот проект находится по адресу: https://github.com/spring-projects/spring-framework.

То, о чем вы просите, имеет смысл, но имейте в виду, что Order предназначен для определения приоритета загрузки bean-компонентов из контекста, поэтому имеет смысл, что Order нужно применять к Aspect, а не к самому Pointcut.

Ответ принят как подходящий

Ну, ответ на ваш вопрос находится в предложении непосредственно перед тем, которое вы цитируете, в том же абзаце того же информационного окна:

Когда две части одного и того же типа совета (например, два метода @After совета), определенные в одном и том же классе @Aspect, должны выполняться в одной и той же точке соединения, порядок не определен (поскольку нет способа получить объявление исходного кода). порядок через отражение для классов, скомпилированных с помощью javac).

Другие вопросы по теме