Ответ 1
Это потому, что cglib помечен как дополнительная зависимость.
По существу вам не нужен cglib для каждого использования библиотеки spring -aop, поэтому maven не загружает ее автоматически. Вы должны указать его вручную, к сожалению.
Я использую Spring 3 и Maven. Я определил все модули Spring в моем pom.xml.
Когда я использую <aop:scoped-proxy />
, я получаю сообщение об ошибке CGLIB.
Ну... Я добавляю CGLIB в качестве зависимости в моем пом и все работает...
Я немного смущен... Maven - менеджер зависимостей... Почему он не загружает CGLIB, когда я использую модуль spring -aop?
Это не единственный случай... Почему некоторые проекты нуждаются в явном декларации зависимости вместо использования механизма транзитивной зависимости Maven?
Это потому, что cglib помечен как дополнительная зависимость.
По существу вам не нужен cglib для каждого использования библиотеки spring -aop, поэтому maven не загружает ее автоматически. Вы должны указать его вручную, к сожалению.
Я немного смущен... Maven - менеджер зависимостей... Почему он не загружает cglib, когда я использую модуль spring -aop?
Поскольку не все используют CGLIB (прокси AOP в Spring может быть динамическим прокси JDK или прокси CGLIB), то CGLIB помечен как optional в pom spring-aop, и вы должны добавить его явно, если хотите его использовать. Это именно то, для чего нужны дополнительные зависимости.
Другим подобным примером является Hibernate, который позволяет выбирать между cglib и javassist в hibernate-core таким же образом. Hibernate также позволяет выбирать между различными пулами подключений (если вы решили использовать один из них) или поставщиками кешей (только ehcache, по умолчанию, не объявлено как необязательное).
Я предполагаю, что cglib не включен в Spring по умолчанию. И поэтому он не включен в pom, если вы явно не включили его.
Насколько я знаю, Maven не может войти в ваши конфигурационные файлы Spring и определить, нужны ли ему дополнительные, по выбору, библиотеки. Хотя, это, конечно, похоже, что это будет классный плагин Spring -Maven, если бы можно было модифицировать pom на лету через плагин. Не уверен, что это так, но было бы круто.
Хорошая новость - это проблема прошлого:
Как и в случае с Spring 3.2, больше не нужно добавлять CGLIB в ваш путь к классу проекта, поскольку классы CGLIB переупаковываются в соответствии с org.springframework и включен непосредственно в spring -core JAR. Эта означает, что поддержка прокси-сервера на основе CGLIB работает так же, как Динамические прокси-серверы JDK всегда имеют.
Подробнее здесь.