Это на самом деле очень разные технологии , CDI представляет собой инъекционный стек зависимости (например, Spring или Guice) с некоторыми функциями AOP (достаточными в типичных случаях использования). AspectJ - полномасштабное аспектно-ориентированное программирование язык, который на самом деле не предлагает каких-либо функций впрыска зависимостей.
.1. Кривая обучения
Обе технологии имеют множество материалов. CDI является новым, но вокруг него много шума. Например. см. CDI AOP Tutorial: Java Standard Method Interception Tutorial.
AspectJ намного старше и есть несколько фантастических книг об этом. Но я бы сказал, что это немного более требовательно.
.2. Переносимость на разные серверы
CDI - это стандарт Java для DI. Мы увидим все больше и больше серверов, реализующих его. AspectJ - это язык, который работает на уровне байт-кода. Он должен работать практически на любых JVM (мобильных, настольных, серверных, апплетах)
Что касается ремонтопригодности и отладки - это действительно разные технологии, поэтому я не буду погружаться в их сравнение. Однако CDI - это стандартный Java-код, а AspectJ - в основном генерация кода на уровне байт-кода. С другой стороны, сгенерированный код AspectJ (стеки-трассировки, декомпиляция) может быть более читаемым, чем тонны отражающих прокси и CGLIB сгенерированных классов с CDI.
Спасибо за ваш ответ. Хотя есть много доступных материалов, лично я чувствую, что разработчикам будет более комфортно обучаться CDI, поскольку в основном это касается аннотации и некоторой конфигурации с использованием XML, где, как AOP, трудно понять, поскольку синтаксис pointcut может быть трудным и трудным читать. Итак, кривая обучения Я считаю, что CDI выигрывает над АОП – user667022