Почему Spring 3 требует явного объявления зависимостей cglib при использовании Maven?

Нет встроенной функции, о которой я знаю, но вот одно решение:

index = zeros(1,sum(b));
index([1 cumsum(b(1:end-1))+1]) = 1;
c = a(cumsum(index));

Объяснение:

Сначала вектор нулей создается той же длины, что и выходной массив (т. е. сумма всех реплик в b). Затем они помещаются в первый элемент и каждый последующий элемент, представляющий, где начинается начало новой последовательности значений. Затем кумулятивную сумму вектора index можно использовать для индексации в a, повторяя каждое значение желаемое число раз.

Для ясности это то, что выглядят различные векторы для значений a и b, заданных в вопросе:

        index = [1 0 1 0 1 1 0 0]
cumsum(index) = [1 1 2 2 3 4 4 4]
            c = [1 1 3 3 2 5 5 5]

EDIT: Для полноты имеется другая альтернатива, использующая ARRAYFUN , но, похоже, это займет от 20 до 100 раз больше времени, чем указанное выше решение с векторами длиной до 10 000:

c = arrayfun(@(x,y) x.*ones(1,y),a,b,'UniformOutput',false);
c = [c{:}];

26
задан Ryan Tenney 20 February 2012 в 19:26
поделиться

3 ответа

Это потому, что cglib помечен как необязательная зависимость .

По сути, вам не нужен cglib для каждого использования библиотеки spring-aop, поэтому maven не загружает ее автоматически. К сожалению, это нужно указывать вручную.

52
ответ дан 28 November 2019 в 06:21
поделиться

Я немного запутался ... Maven - это диспетчер зависимостей ... Почему он не загружает cglib, когда я использую модуль spring-aop ?

Поскольку не все используют CGLIB (прокси AOP в Spring может быть динамическим прокси JDK или прокси CGLIB), CGLIB помечен как необязательная зависимость в pom spring-aop , и вы должны добавить его явно, если хотите его использовать. Это как раз то, для чего нужны необязательные зависимости.

Другой похожий пример - Hibernate, который позволяет вам одинаково выбирать между cglib и javassist в hibernate-core . Hibernate также позволяет вам выбирать между различными пулами соединений (если вы решите использовать один из них) или поставщиками кеша (только ehcache, установленный по умолчанию, не объявлен как необязательный).

17
ответ дан 28 November 2019 в 06:21
поделиться

Я предполагаю, что cglib не включен в Spring по умолчанию . И поэтому он не включен в pom, если вы явно не включите его.

Насколько мне известно, Maven не может войти в ваши файлы конфигурации Spring и определить, нужны ли ему дополнительные необязательно включенные библиотеки. Хотя это определенно звучит так, как будто это был бы крутой плагин Spring-Maven, если бы можно было изменять pom на лету через плагин. Не уверен, что это так, но было бы круто.

5
ответ дан 28 November 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: