LINUX.ORG.RU
 

Вышел Spring Framework 3.1


0

0

После двух лет разработки состоялся релиз веб фреймворка Spring Framework 3.1.

Основные изменения:

  • Абстракция кэша, позволяющая декларативно описывать кэширование с помощью аннотаций (@Cacheable и т.п.);
  • Поддержка Servlet 3.0 позволяющая полностью отказаться от XML файлов конфигурации;
  • Улучшенная поддержка MVC, в частности аннотация @RequestPart ;
  • Поддержка новых функций Java 7, в том числе JDBC 4.1 и fork-and-join;
  • Исправления последних ошибок.

Сообщество разработчиков Spring Framework рекомендует обновиться всем пользователям 3.0.x версий.

>>> Анонс


[#]  
>>-----Цитата---->>

Servelet

<<-----Цитата----<<

ктоэта?! :-D

и, по-моему, слово source лишнее в названии фреймворка.

** ()
[#]  

Спасибо, обновился :-)

**** ()
[#]  

Отказ от XML всегда хорошо.

**# ()
[#]  

Не нужно.

anonymous ()
[#]  
vada

Неподъемное угробище.

**** ()
[#]  
CARS

Лучше уж XML, чем высоченная стопка аннотаций над методом.

** ()
[#] Ответ на: комментарий от aol 14.12.2011 10:42:39  
iBliss
>>-----Цитата---->>

ктоэта?! :-D

<<-----Цитата----<<

Kolbasa

* ()
[#]  
Drolyk

ну и хорошо, отличный framework :)

*** ()
[#] Ответ на: комментарий от CARS 14.12.2011 12:18:39  
dotbg

Лично мне удобнее аннотации.Меньше букв :) и бегать из одного файла в другой не требуется

*** ()
[#]  
Absurd

Сегодня впервые употребил ЛОР как информационный ресурс и сменил 3.1.0.BUILD-SHAPSHOT на 3.1.0.RELEASE в своем pom.xml

*** ()
[#] Ответ на: комментарий от vada 14.12.2011 12:16:25  
r

Что довольно занимательно поскольку создавался в виде "нахрена вам этот неподъемный j2ee - легкий спринг то шо надо для тырпрайза".

***** ()
[#] Ответ на: комментарий от r 14.12.2011 15:31:36  
vada

Ага. EJB упростили, а Spring как был монстром так им и остался.

**** ()
[#] Ответ на: комментарий от vada 14.12.2011 15:58:29  

IMHO Управление транзакциями, DI, тестирование в Spring на много проще чем JEE. Плюс в Spring есть интеграция с популярными фреймворками что делает его ещё и gluecode помимо просто DI.

2:vada&r Чем Spring более громоздкий чем JEE? )))

** ()
[#] Ответ на: комментарий от Yilativs 14.12.2011 16:38:34  
vada
>>-----Цитата---->>

Чем Spring более громоздкий чем JEE? )))

<<-----Цитата----<<

спеком Ж:)

**** ()
[#]  
stevejobs

Новая версия ненужно! Спешите видеть ненужно, в новой версии оно особенно ненужно! :)

** ()
[#] Ответ на: комментарий от stevejobs 14.12.2011 18:14:00  

Вы игнорируете этого ненужно.

* ()
[#] Ответ на: комментарий от vada 14.12.2011 17:48:02  
>>-----Цитата---->>

спеком Ж:)

<<-----Цитата----<<

Вы случаем в Jboss или Oracle не работаете? Говорить, что spring тяжелый в сравнении с EJB и прочими EE это по меньшей мере странно.

()
[#]  

Не прошло и двух лет...

anonymous ()
[#]  

Аннотации - такой же facepalm, как и XML с неймспейсами. Куда мир катится...

* ()
[#]  
mikhalich

>Поддержка Servlet 3.0 позволяющая полностью отказаться от XML файлов конфигурации;

"Making humans edit XML is sadistic!(c) Django туториал.

** ()
[#]  
RedPossum

мы должны быть благодарны spring'у и адепту его Maxcom'у за LOR

*** ()
[#] Ответ на: комментарий от mikhalich 15.12.2011 1:53:00  
Nagwal

>"Making humans edit XML is sadistic!(c) Django туториал.

А программисты не человеки. Они инопланетяне, просто маскируются хорошо.

*** ()
[#]  
rtvd

Дай Бог этому говно-фреймворку скорой и мучительной смерти.

*** ()
[#] Ответ на: комментарий от vgudkov 14.12.2011 18:35:31  
rtvd
>>-----Цитата---->>

Вы случаем в Jboss или Oracle не работаете? Говорить, что spring тяжелый в сравнении с EJB и прочими EE это по меньшей мере странно.

<<-----Цитата----<<

Не знаю, какой он по сравнению с EJB по размеру. Но то, что он крив, уродлив и глючен - 100%. Надо быть нереальным гением чтобы породить такую мерзкую химеру. Слава и почет Роду Джонсону и всем его последователям!

*** ()
[#] Ответ на: комментарий от vada 14.12.2011 15:58:29  
rtvd
>>-----Цитата---->>

Ага. EJB упростили, а Spring как был монстром так им и остался.

<<-----Цитата----<<

А нахрена его делать легковесным, удобным и надежным? Тогда ведь никто не будет книжки про него покупать да на всякие семинары ходить. А ведь это - основной доход Spring Source.

*** ()
[#]  

не нужно с тех пор как появился java ee 6. Спринг нынче монстрообразный.
Давно сполз с спринга, чего и вам желаю.

*** ()
[#] Ответ на: комментарий от rtvd 15.12.2011 4:46:45  
>>-----Цитата---->>

Но то, что он крив, уродлив и глючен - 100%

<<-----Цитата----<<

а это вы зря. Лучше кода чем в исходниках спринга я не видел. По нему учился.

*** ()
[#] Ответ на: комментарий от JFreeM 15.12.2011 5:16:51  
vada

Код у спринга действительно хорош.
Но многооооо.......... :)

**** ()
[#] Ответ на: комментарий от JFreeM 15.12.2011 5:16:51  
rtvd
>>-----Цитата---->>

Но то, что он крив, уродлив и глючен - 100%

<<-----Цитата----<<
>>-----Цитата---->>

а это вы зря. Лучше кода чем в исходниках спринга я не видел. По нему учился.

<<-----Цитата----<<

Это типа шутка такая?

Последний раз смотрел на него три года назад. Впечатления такие: сам по себе код - на троечку. Многословно, неоправданно запутано. Но главная жесть не в этом: а) глючно б) кривой дизайн самого API. А раз дизайн убог и код глючен, то нафига нужна эта то-ли обертка надо всем, то-ли криво спроектированный dependency injection container?

*** ()
[#] Ответ на: комментарий от asaw 14.12.2011 22:11:21  
>>-----Цитата---->>

Аннотации - такой же facepalm, как и XML с неймспейсами. Куда мир катится...

<<-----Цитата----<<

радоваться надо - вокруг кризис, а тут столько новых рабочих мест сразу появилось! фабрики - рабочим, землю - крестянам, жабу - быдлу!

anonymous ()
[#] Ответ на: комментарий от rtvd 15.12.2011 19:33:04  
Nagwal

>кривой дизайн самого API

А что там особо кривого (за исключением разве-что Hibearnate/JPA/JDBC Template)?

*** ()
[#] Ответ на: комментарий от vada 14.12.2011 17:48:02  
>>-----Цитата---->>

спеком Ж:)

<<-----Цитата----<<

Модульность это все решает. В отличии от JEE где контейнеры (GlassFish,JBoss,WebSphere,WebLogic поднимают кучу хлама.

** ()
[#] Ответ на: комментарий от Nagwal 15.12.2011 21:58:22  
rtvd
>>-----Цитата---->>

А что там особо кривого (за исключением разве-что Hibearnate/JPA/JDBC Template)?

<<-----Цитата----<<

Кроме упомянутого вами - абсолютно даунская реализация dependency injection.

Но поставим вопрос иначе: а что там не кривое?

*** ()
[#] Ответ на: комментарий от rtvd 16.12.2011 8:04:18  

молодой человек может предложить достойную замену? только, пожалуйста, замену _всему фреймворку_, а не некоторым частям!
или достал апсиратель и апсираешь? может, тогда в троллксы?

** ()
[#] Ответ на: комментарий от rtvd 16.12.2011 8:04:18  
Nagwal

>Кроме упомянутого вами - абсолютно даунская реализация dependency injection.

А чем di конкретно не нравится? Имхо все более-менее адекватно сделано.

>Но поставим вопрос иначе: а что там не кривое?

Собственно di вполне адекватный. MVC тоже нормальный, jmx и jms интеграция тоже вменяемая.

По крайней мере в третьем. Более ранними я давно не пользовался, не помню уже.

*** ()
[#]  
mopsene
>>-----Цитата---->>

Поддержка Servlet 3.0 позволяющая полностью отказаться от XML файлов конфигурации;

<<-----Цитата----<<

Отлично.

* ()
[#] Ответ на: комментарий от Nagwal 16.12.2011 14:04:42  
rtvd
>>-----Цитата---->>

Кроме упомянутого вами - абсолютно даунская реализация dependency injection.

<<-----Цитата----<<
>>-----Цитата---->>

А чем di конкретно не нравится? Имхо все более-менее адекватно сделано.

<<-----Цитата----<<

Адекватно чему?

Это нормально, что описания beans и их связи являются не декларативными а императивными? То, что из-за этого просто порядок их упоминания в файле имеет огромное значение. Что поменяв порядок Spring начинает блевать эксепшнами на траниц пять с маловменяемым содержанием?

Причем сделать нормально, декларативно, может и толковый школьник. А еще он может элементарно написать код, что вместо тонны бредовых эксепшнов просто распечатает неразруливаемую циклическую зависимость.

А нормально, что вместо того, чтобы просто это пофиксить, предлагается не использовать конструкторы с аргументами, и вместо этого все данные передавать сеттерами а потом по необходимости дергать init? Это в их понимании "best coding practice". Пипелац полный. Это просто получается какая-то ява для анацефалов.

P.S. Я надеюсь, что и так очевидно, почему декларативное описание связей лучше императивного и почему конструкторы с аргументами лучше конструктора без оных и с кучей сеттеров впридачу?

Смутно помню, что были еще какие-то извраты и недочеты. Но сходу детали не помню. Вроде бы

а) Spring скидывает все имена бинов в одно пространство имен, что создает адский страч. Причем плохо разргебаемый, когда у тебя кучка связанных XMLей с описанием бинов и кто-то сделал крооохотное изменение в своей XMLке, что неожиданно вылезло в конфликт с твоим "творчеством"

б) были какие-то кривости в плане того, как можно параментризовать описание. Да, можно подгрузить properties и передать их значения (по крайней мере кое-какие из них) через сеттеры в бины. Но по-моему связывание бинов параметризовать не было возможным.

>>-----Цитата---->>

jmx и jms интеграция тоже вменяемая.

<<-----Цитата----<<

jms имел несчастье видеть. Пришлось ее убрать к чертям. Код может и ничего, вот только не дружил в таким Ъ enterprise как Weblogic JMS. Spring там как-то интересно жонглировал всякими там data sources и часть объектов плодил из одного, часть из другого и потом объединенная химера не хотела жить.

Еще видел Springовую обертку над JDBC. Уж лучше без нее чем с ней. Кода получается _намного_ больше и он - запутанней. Зато любители Spring и антипаттернов фапают по-полной.

*** ()
[#] Ответ на: комментарий от aol 16.12.2011 8:24:05  
rtvd
>>-----Цитата---->>

молодой человек может предложить достойную замену? только, пожалуйста, замену _всему фреймворку_, а не некоторым частям!

<<-----Цитата----<<

или достал апсиратель и апсираешь? может, тогда в троллксы?

Подозреваю, что по сравнению с вами я уже немолодой. :)

АМне мегафреймфорк никогда не был нужен. Зачем он? Инструмен выбирается под задачу, а не чтобы вписать его в CV в стиле "Я макака, что обучена грызть Spring".

По-сути, единственное, что мне было когда-либо нужно из всего того, что делает Spring - dependency injection. Все остальное либо вообще не нужно, либо делается прекрасно непосредственно стандартным библиотеками Java.

*** ()
[#] Ответ на: комментарий от rtvd 17.12.2011 1:30:20  
rtvd
>>-----Цитата---->>

jms имел несчастье видеть. Пришлось ее убрать к чертям. Код может и ничего, вот только не дружил в таким Ъ enterprise как Weblogic JMS. Spring там как-то интересно жонглировал всякими там data sources и часть объектов плодил из одного, часть из другого и потом объединенная химера не хотела жить.

<<-----Цитата----<<

Опечатка: не data source а connection pool. Слава богу, уже года два как начал забывать терминологию JMS.

*** ()
[#] Ответ на: комментарий от rtvd 17.12.2011 1:30:20  
Legioner

Такое ощущение, что вы видели спринг лет 5 назад. Аннотациями всё помечается декларативно, зачем какой то XML, я не знаю. Циклические зависимости у меня лично никогда не возникали. Вообще я плохо представляю, как разрулить циклическую зависимость конструкторами, видимо никак, так что спринг правильно говорит, сеттеры ваше всё, а ещё лучше не делать циклических зависимостей, есть что то неправильное в этой идее.

А сеттеры лучше конструкторов потому, что с ними всё понятно без чтения жавадока.

new Blablabla(1, 2, 3, "bbb", 0.7);

vs

bla = new Blablabla();
bla.setWeight(1).setWidth(2).setHeight(3).setTitle("bbb").setOpacity(0.7);
по-мне второй вариант читабельнее.

>>-----Цитата---->>

а) Spring скидывает все имена бинов в одно пространство имен, что создает адский страч. Причем плохо разргебаемый, когда у тебя кучка связанных XMLей с описанием бинов и кто-то сделал крооохотное изменение в своей XMLке, что неожиданно вылезло в конфликт с твоим "творчеством"

<<-----Цитата----<<

Есть контексты, аналог namespace-ов, вроде. Правда надобности использовать не было.

>>-----Цитата---->>

Еще видел Springовую обертку над JDBC. Уж лучше без нее чем с ней. Кода получается _намного_ больше и он - запутанней. Зато любители Spring и антипаттернов фапают по-полной.

<<-----Цитата----<<

Тут убогость Java, лучше никак. Можно и без неё, если не нравится, никто же не заставляет. Вообще try-with-resources сильно облегчает работу с JDBC, ещё бы убрали Checked Exceptions из языка и именованные параметры в PreparedStatement-ы добавили, можно было бы JDBC использовать без матов.

***** ()
[#] Ответ на: комментарий от Legioner 17.12.2011 1:52:07  
rtvd
>>-----Цитата---->>

Такое ощущение, что вы видели спринг лет 5 назад.

<<-----Цитата----<<

Не, 3 года назад. %)

>>-----Цитата---->>

Аннотациями всё помечается декларативно, зачем какой то XML, я не знаю. Циклические зависимости у меня лично никогда не возникали. Вообще я плохо представляю, как разрулить циклическую зависимость конструкторами, видимо никак, так что спринг правильно говорит, сеттеры ваше всё, а ещё лучше не делать циклических зависимостей, есть что то неправильное в этой идее.

<<-----Цитата----<<

ОК. Вот допустим надо сделать так:

Есть class A {

A(B b);

}

и class B {

setA(A a);

}

Нужно, чтобы создались A и B. Причем экземпляр B передается в конструктор A, а A передается в B сеттером. Да, и конечно, на самом деле есть еще несколько сеттеров, и данные хотелось бы из .properties вытащить, но для простоты про это можно забыть.

Как это можно сделать аннотациями?

И почему Spring собирает эти бины в кучу только если у него хорошее настроение, хотя выяснить, что сначала надо создать экзепляр B, потом А, и лишь затем дернуть сеттер в B - совсем тривиально?

>>-----Цитата---->>

А сеттеры лучше конструкторов потому, что с ними всё понятно без чтения жавадока.

<<-----Цитата----<<

1. Если код Ваш - Вы и так в курсе что к чему. А если не Ваш, то javadoc читать скорей всего прийдется, чтобы понять контракт класса.

2. Тут, конечно, недостаток Java - нет именованных параметров. Ну и ладно.

3. Контрпример:

class Pair {

private int x, y;

void setX(int x) { this.x = x;

}

int getX() {

return x;

}

void setY(int y) { this.y = y;

}

int getY() {

return y;

}

}

лучше чем

class Pair {

public final int x, y;

Pair(int x, int y) {

this.x = x;

this.y = y;

}

}

?

>>-----Цитата---->>

ещё бы убрали Checked Exceptions из языка

<<-----Цитата----<<

Не дай Бог. CheckedExceptions гарантируют, что будет выброшено только то, что ожидается. Писать, когда не очевидно, что и при каких условиях будет "выкинуто" - жесть. Особенно, когда это вылезает при каких-то экзотических условиях, не отлавливаемых нормальным тестированием, и тебя из-за этого могут разбудить ночью. Нафиг-нафиг. Но тут, конечно, еще и вопрос вкуса.

>>-----Цитата---->>

и именованные параметры в PreparedStatement-ы добавили

<<-----Цитата----<<

Именованные параметры - благо. Согласен.

*** ()
[#] Ответ на: комментарий от Legioner 17.12.2011 1:52:07  
>>-----Цитата---->>

bla.setWeight(1).setWidth(2).setHeight(3).setTitle("bbb").setOpacity(0.7);

<<-----Цитата----<<

Какое уродство.

***** ()
[#] Ответ на: комментарий от rtvd 17.12.2011 5:23:29  
Legioner
>>-----Цитата---->>

Не дай Бог. CheckedExceptions гарантируют, что будет выброшено только то, что ожидается.

<<-----Цитата----<<

Не гарантируют. Легко кидать checked exceptions из метода, который их не объявил.

Изредка checked exceptions могут быть полезны, чего-нибудь вроде UserNotFoundException. Но SQLException должен быть unchecked, и вообще все исключения в JDK, потому что в 140% случаях текущая ситуация ведёт либо к throws SQLException везде в DAO слое, либо к try { ... } catch (SQLException e) { throw new RuntimeException(e); }.

>>-----Цитата---->>

Писать, когда не очевидно, что и при каких условиях будет "выкинуто" - жесть. Особенно, когда это вылезает при каких-то экзотических условиях, не отлавливаемых нормальным тестированием, и тебя из-за этого могут разбудить ночью. Нафиг-нафиг. Но тут, конечно, еще и вопрос вкуса.

<<-----Цитата----<<

Мне хватает unchecked exceptions, их никто не запрещает перечислять в throws для документирования.

***** ()
[#] Ответ на: комментарий от rtvd 17.12.2011 5:23:29  
Legioner
>>-----Цитата---->>

Как это можно сделать аннотациями?

И почему Spring собирает эти бины в кучу только если у него хорошее настроение, хотя выяснить, что сначала надо создать экзепляр B, потом А, и лишь затем дернуть сеттер в B - совсем тривиально?

<<-----Цитата----<<

Проверил - поведение такое же, зависит от порядка классов, в котором он их просматривает. Хз, глупое поведение, конечно, наверное можно попробовать зарепортить как баг.

***** ()
[#] Ответ на: комментарий от rtvd 17.12.2011 1:34:55  
>>-----Цитата---->>

Подозреваю, что по сравнению с вами я уже немолодой. :)

<<-----Цитата----<<

да, ваше заседенелое муде внушает :-D всё, умолкаю.

** ()
[#] Ответ на: комментарий от Legioner 17.12.2011 9:14:53  

Хотя бы уж не выпендриваться и написать несколько операторов.

***** ()
[#] Ответ на: комментарий от Legioner 17.12.2011 9:14:02  
rtvd
>>-----Цитата---->>

Не дай Бог. CheckedExceptions гарантируют, что будет выброшено только то, что ожидается.

<<-----Цитата----<<
>>-----Цитата---->>

Не гарантируют. Легко кидать checked exceptions из метода, который их не объявил.

<<-----Цитата----<<

Может мы о разном? Можно пример, как можо именно checked exception кинуть, не объявляя его в "throws"?

*** ()
[#] Ответ на: комментарий от Legioner 17.12.2011 9:34:23  
rtvd
>>-----Цитата---->>

Проверил - поведение такое же, зависит от порядка классов, в котором он их просматривает. Хз, глупое поведение, конечно, наверное можно попробовать зарепортить как баг.

<<-----Цитата----<<

Народ уже репортил. Стандартный ответ - не пользуйтесь конструкторами с параметрами, т.к. это якобы плохо.

Похоже на стандартный ответ "толкового" саппорта:

юзер: "какого ваш сайт не работает? и вообще порт 80 у вас закрыт"

саппорт: "какой у вас браузер?"

юзер: "Firefox. Но браузер не при чем. У вас сервер упал."

саппорт: "Мы не поддерживаем ничего, кроме IE"

юзер: "Под IE тоже не работает"

саппорт: "Мы поддерживаем только IE 5"

юзер: "Чеооо?! Его же уже давно черви съели на кладбище"

саппорт: "Ничего не знаю, поддерживается только IE 5"

юзер: "Пилять... Вообще-то на IE 5 тоже не работает. И не может работать. И, еклмн, чего вы мне тюльку травите?"

саппорт: "Это Вы меня пытаетесь сбить с толку. Ничего не знаю про эти ваши порты, у нас такого в документации нет"

*** ()