Для чого саме Spring Framework? [зачинено]


623

Я багато чую про Весну , люди в усьому Інтернеті говорять, що Весна є гарною основою для веб-розробки. Для чого саме Spring Framework?


10
Я розумію, що питання дуже широке, але я вважаю, що в цьому дуже конкретному випадку питання є дуже важливим для розробників-юніонів, про які часто говорять про Весну люди, які вважають, що це досить популярно, що немає потреби навіть розповідати, що це робить. Зрештою, підніміть руку, якщо ви ніколи не чули про Instagram та яка його мета .... (зізнання: я ніколи не використовував Insta)
usr-local-ΕΨΗΕΛΩΝ

2
Питання було задано 10 років тому, і в той час Весна була трохи меншою, ніж зараз, з усіма своїми підпроектами, такими як Spring Boot, Spring Data, Spring Rest тощо. І насправді тому це було ближче рік тому, через широкість цього питання. У той час, коли я задавав це питання, я просто хотів розібратися в DI і навіщо це потрібно.
Максим

Відповіді:


713

В основному Весна є основою для що є схемою, яка дозволяє будувати дуже нерозділені системи.

Проблема

Наприклад, припустимо, що вам потрібно перелічити користувачів системи і таким чином оголосити інтерфейс під назвою UserLister:

public interface UserLister {
    List<User> getUsers();
}

І, можливо, реалізація доступу до бази даних, щоб отримати всіх користувачів:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

На ваш погляд, вам потрібно буде отримати доступ до екземпляра (лише приклад, пам’ятайте):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

Зауважте, що наведений вище код не ініціалізував змінну userLister. Що нам робити? Якщо я явно інстанціюю такий об'єкт:

UserLister userLister = new UserListerDB();

... Я б поєднав представлення з моєю реалізацією класу, що має доступ до БД. Що робити, якщо я хочу перейти від реалізації БД до іншої, яка отримує список користувачів із відокремленого комою файлу (пам’ятайте, це приклад)? У такому випадку я б знову перейшов до свого коду і змінив вищезазначений рядок на:

UserLister userLister = new UserListerCommaSeparatedFile();

Це не має жодної проблеми з такою невеликою програмою, як ця, але ... Що відбувається в програмі, яка має сотні переглядів та аналогічну кількість бізнес-класів? Технічне обслуговування стає кошмаром!

Весняний (залежний впорскування) підхід

Що весна робить, це з'єднати класи за допомогою XML-файлу чи приміток, таким чином всі об'єкти ініціюються та ініціалізуються Spring та вводяться у потрібні місця (сервлети, веб-рамки, бізнес-класи, DAO, тощо, тощо, тощо, тощо) ...).

Повернувшись до прикладу навесні, нам просто потрібно мати сеттер для userListerполя і мати або XML-файл на зразок цього:

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

або більш просто анотувати подані в нашому класі перегляду за допомогою @Inject:

@Inject
private UserLister userLister;

Таким чином, коли вид буде створений, він магічно матиме UserListerготовність до роботи.

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

Це здорово! Чи не так?

  • Що робити, якщо ви хочете використовувати іншу реалізацію вашого UserListerінтерфейсу? Просто змініть XML.
  • Що робити, якщо не буде UserListerготова реалізація? Програмуйте часовий макет виконання UserListerта полегшіть розвиток погляду.
  • Що робити, якщо я більше не хочу використовувати Spring? Просто не використовуйте його! Ваша заявка не поєднана з нею. Інверсія управління стверджує: "Програма керує рамкою, а не рамка керує програмою".

Існує ще кілька варіантів ін'єкції залежності, що, на мій погляд, зробило Весну такою відомою, окрім її простоти, елегантності та стабільності, що хлопці SpringSource запрограмували безліч POJO, які допомагають інтегрувати Spring з багатьма іншими загальними рамками, не будучи нав'язливий у вашій програмі. Крім того, у Spring є кілька хороших підпроектів, таких як Spring MVC, Spring WebFlow, Spring Security і знову луанг-список тощо.

Сподіваюсь, це допомагає. У будь-якому разі, я закликаю вас прочитати статтю Мартіна Фаулера про впорскування залежностей та інверсію управління, оскільки він робить це краще, ніж я. Після розуміння основи поглянути на Спрінг документації , на мій погляд, це буде використовуватися , щоб бути кращою книгою Spring коли - або.


148
Яка різниця між необхідністю змінити рядок коду та рядок XML? Пекло зусиль та технічного обслуговування точно таке чи навіть гірше, оскільки зовнішні файли xml, безсумнівно, додають складності? Вибачте, але я просто не отримую цього, я взагалі не бачу ніякої користі. Будь ласка, заповніть мене, якщо я щось пропускаю.
fred

23
@fred - Уявіть, що ви робите тестування. Без введення залежності (DI можна використовувати з анотаціями або з XML) ви не можете належним чином перевірити, оскільки ви не можете знущатися над залежностями.
Петро Мінчев

18
@fred - визначення всіх ін'єкцій у XML справді мало сенсу. Це великі накладні витрати на обслуговування. Для цього EJB представила концепцію анотацій для ін'єкційних точок. Вони набагато простіші, і екземпляр за замовчуванням буде введений (для одиничних тестів це можна змінити один раз). Це спрацювало так добре, що Весна тепер скопіювала такий підхід. Зауважте, що в разі необхідності (але лише якщо це дійсно потрібно) анотації все ще можуть бути замінені XML у EJB.
Майк Браун

36
Або, знаєте, використовувати заводський статичний метод. Змініть заводський тип повернення, і тепер усі класи, які використовують це повернене значення, змінюються. Весна в Presto вже не потрібна ...
Qix - MONICA ПОМИЛИЛИ

16
@mmcrae Я вважаю за краще зробити один дзвінок рефакторизації в моєму IDE, ніж записати XML.
Qix - МОНІКА ПОМИЛИЛА

63

Весна містить ( як справедливо зазначив Скаффман ) рамку MVC. Якщо коротко пояснити, ось мої дані. Spring підтримує сегрегацію службового шару, веб-шару та бізнес-рівня, але найкраще це "впорскування" об'єктів. Отже, щоб пояснити, що на прикладі розглянемо приклад нижче:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

Тепер у вашому коді у вас є клас під назвою RoadTrip наступним чином

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Тепер, коли хочете екземпляр Trip; іноді ви можете захотіти, щоб позашляховик ініціалізував FourWheel, а іноді ви можете захотіти Sedan. Дійсно залежить, що ви хочете, виходячи з конкретної ситуації.

Щоб вирішити цю проблему, ви хочете, щоб заводський візерунок був як креативний шаблон. Де завод повертає потрібний екземпляр. Таким чином, у кінцевому підсумку ви отримаєте багато клей-коду, щоб правильно створити об'єкти. Spring найкраще виконує роботу з клейовим кодом без коду клею. Ви оголошуєте відображення в XML, і вони автоматично ініціалізують об'єкти. Він також багато використовує одиночну архітектуру для примірників, що допомагає в оптимізованому використанні пам'яті.

Це також називається Інверсія управління. Інші рамки для цього - Google Guice, контейнер Pico тощо.

Крім цього, Spring має рамки валідації, широку підтримку шару DAO у співпраці з JDBC, iBatis та Hibernate (та багато іншого). Забезпечує чудовий транзакційний контроль над транзакціями бази даних.

До Весни є набагато більше, що можна прочитати в хороших книгах, таких як "Pro Spring".

Наступні URL-адреси також можуть допомогти.
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss? l = SpringFramework


5
Весна містить рамки MVC. Але це багато, набагато більше того.
скафман

Не бажаючи занадто сильно вибирати, WebMVC є частиною базового весняного дистрибутива. Webflow, RCP та ін. Не є.
скафман

1
Це добре, я не знав, що ви можете інстанціювати об’єкти типу Interface на Java - що незаконно @skaffman допоможіть мені зрозуміти цю відповідь (див. Instance of FourWheel)
Jossie Calderon

47

У минулі часи Весна була лише роботою кадру для ін'єкцій залежностей ( Guice , PicoContainer , ...), але сьогодні це загальне рішення для створення вашої Enterprise Application .

Весняна ін'єкційна залежність, яка, звичайно, є серцем весни, все ще є (і інші хороші відповіді ви можете переглянути тут), але з весни їх є більше ...

Весна зараз має безліч проектів, кожен з яких має кілька підпроектів ( http://spring.io/projects ). Коли хтось говорить про весну, ви повинні дізнатися, про який проект весни він говорить, це лише весняний стрижень, який відомий як весняний каркас , або це ще один весняний проект.

Деякі весняні проекти, які варто також згадати:

Якщо вам потрібна якась додаткова функція для вашої програми, ви також можете її знайти там:

  • Весняна партія пакетної основи, розроблена таким чином, що дозволяє розвивати
    пакетне застосування
  • Весняне HATEOAS просте створення REST API на основі принципу HATEOAS
  • Spring Mobile і Spring Andriod для розробки мобільних додатків
  • Spring Shell створює повнофункціональний додаток оболонки (він же командного рядка)
  • Spring Cloud і Spring Cloud Flow для хмарних додатків

Є також кілька крихітних проектів, наприклад, весна-соціальна-facebook ( http://projects.spring.io/spring-social-facebook/ )

Ви можете використовувати весну для веб-розробки, оскільки в ній є Spring MVCмодуль, який є частиною проекту Spring Framework . Або ви можете використовувати весну з іншим веб-рамкою, наприклад, struts2 .


1
Я насправді хотів би бачити mvc, data, jpa та інші частини Spring, щоб не використовувати ядро ​​Spring Spring DI, а поставити Dagger у самому центрі Spring.
dlamblin

25

Для чого весна? Я відповім на це питання найближчим часом, але спочатку давайте ще раз подивимось на приклад виграшного перемоги. Це не чудовий приклад, тому що він не виправдовує необхідності нових рамок.

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

Готово! Отже, навіть якщо у вас сотні чи тисячі переглядів, вам все одно просто потрібно змінити один рядок коду, як у підході Spring XML. Але зміна рядка коду все ж вимагає перекомпіляції, на відміну від редагування XML, який ви кажете? Ну мій метушливий друже, використовуй мурашку та сценарій геть!

То для чого весна? Це для:

  1. Сліпі розробники, які стежать за стадом
  2. Роботодавці, які ніколи не хочуть наймати випускників-програмістів, тому що вони не навчають таких кадрів в Uni
  3. Проекти, які почалися з поганого дизайну та потребують печворку (як показано на прикладі переможця Уго)

Подальше читання: http://discuss.joelonsoftware.com/?joel.3.219431.12


11
Розчарування вбік, я дивуюсь вашим аргументам. Я не знаю жодного інструмента програмування, який ви не можете використовувати для створення поганого дизайну. Те, на що ви прагнете, полягає в тому, що за допомогою фреймворків ви можете змусити поганий код робити багато чого. Це загально вірно і не характерно для Весни. Інакше в чому сенс? Ви не вважаєте, що компетентні розробники можуть добре використати те, що може запропонувати Spring - зокрема, які інструменти тієї рамки вони використовують? Принаймні я впевнений, що ви не маєте на увазі, що жоден розробник Spring ще не чув про розширення занять. Подальше читання, однак, веселе.
sthzg

2
Крім того, ваш приклад працює тому, що представленням потрібна лише одна введена послуга ( UserLister), але що робити, якщо їй потрібно кілька сервісів, які не поділяються між різними BaseViewдітьми? На щастя, у Java не існує багаторазового успадкування.
Едуард Берте

@EdouardBerthe Справедливий пункт. Моя відповідь не була спробою знехтувати DI, вона лише вказує, що приклад, показаний у прийнятій відповіді, не є найбільшим; сценарій, який ви пропонуєте, швидше за все, буде працювати краще. Справа, яку я справді намагався зробити, - це не те, що тобі не потрібен DI, а для цього не потрібен цілий фреймворк.
Еш,

19

Дуже коротко підсумовуючи, скажу, що Весна - це «клей» у вашій заявці. Він використовується для інтеграції різних фреймворків та власного коду.


15

Весна - це три речі.

  1. Пружина справляється з ін'єкцією залежності, і я рекомендую прочитати чудове введення Мартіна Фаулера щодо введення залежності.
  2. Друга річ, яку робить Spring - це обробляти чудові бібліотеки Java дуже елегантним способом використання у своїх програмах. Для хорошого прикладу дивіться, як весна обгортає виконавців завдань та кварцового планувальника.
  3. По-третє, Spring пропонує купу реалізацій веб-матеріалів, таких як REST, веб-рамка MVC та інше. Вони розраховують, оскільки ви використовуєте Spring для перших двох, можливо, ви можете просто використовувати його для всього, що потрібно вашому веб-додатку.

Проблема полягає в тому, що весна DI справді добре продумана, обгортки навколо інших речей справді добре продумані в тому, що інші речі все продумали, а весна просто гарно обгортає це. Реалізація MVC та REST Spring та всі інші речі не так добре виконані (YMMV, IMHO), але є винятки (Spring Security - це бомба). Тому я схильний використовувати Spring для DI та його крутих обгортків, але віддаю перевагу іншим речам для Інтернету (мені дуже подобається Tapestry), REST (Джерсі справді міцний) тощо.


9
YMMV, IMHO - Твоя пробіг, може, мій, на мій скромний погляд для тих із тебе, хто не вільно говорить абревіатури, як я ...
Сакамото Казума,

11

Що ви, мабуть, хотіли б у веб-додатку із Spring -

  • Spring MVC, який з 2.5+ дозволяє використовувати POJO в якості класів Controller, тобто вам не доведеться поширюватися з будь-якого конкретного фреймворку (як у Struts або Spring pre-2.5). Класи контролерів також мертві, прості для тестування, завдяки частковому введенню залежності
  • Весняна інтеграція з Hibernate, що робить гарну роботу зі спрощення роботи з цим рішенням ORM (у більшості випадків)
  • Використання Spring для веб-програми дозволяє використовувати об’єкти домену на всіх рівнях програми - ті ж класи, які відображені за допомогою Hibernate, - це класи, які ви використовуєте як "форми квасолі". За своєю природою це призведе до більш надійної доменної моделі, частково тому, що вона скоротить кількість класів.
  • Весняні теги форм полегшують створення форм без особливих клопотів.

Крім того, Spring - ВЕЛИЧЕЗНА - тому існує багато інших речей, які можуть вам зацікавитись у веб-додатку, наприклад Spring AOP або Spring Security. Але чотири речі, перелічені вище, описують загальні компоненти Spring, які використовуються у веб-програмі.


9

Я бачу дві частини до цього:

  1. "Для чого саме весна" -> дивіться прийняту відповідь переможець Уго.
  2. "[...] Весна є [a] хорошою основою для веб-розробки" -> люди, які говорять про це, говорять про Spring MVC. Spring MVC є однією з багатьох частин Spring, і є веб-рамкою, яка використовує загальні особливості Весни, як-от введення залежності. Це досить загальна рамка, оскільки вона дуже настроюється: ви можете використовувати різні шари db (Hibernate, iBatis, звичайний JDBC), різні шари перегляду (JSP, Velocity, Freemarker ...)

Зауважте, що ви можете ідеально використовувати Spring у веб-додатку, не використовуючи Spring MVC. Я б сказав, що більшість веб-додатків Java роблять це, використовуючи інші веб-рамки, такі як Wicket, Struts, Seam, ...


8

Весна чудово підходить для склеювання примірників занять разом. Ви знаєте, що вашим класам сплячки завжди потрібен джерело даних, Spring з'єднує їх разом (і також має реалізацію джерела даних).

Ваші об’єкти доступу до даних завжди потребуватимуть режиму глибокого сну, Весна залучає класи Зимового режиму до ваших DAO для вас.

Крім того, Spring в основному дає вам суцільні конфігурації з ряду бібліотек, і в цьому дає вам рекомендації щодо того, які бібліотеки ви повинні використовувати.

Весна - це справді чудовий інструмент. (Я не говорив про Spring MVC, просто про базові рамки).


5

Прийнята відповідь не передбачає використання приміток, оскільки Spring представив підтримку різних приміток для конфігурації.

Весняний (залежний впорскування) підхід

Є ще один спосіб з’єднати класи поряд із використанням XML-файлу: примітки. Давайте використовувати приклад з прийнятого відповіді і зареєструвати компонент безпосередньо на класі , використовуючи один з анотацій @Component, @Service, @Repositoryабо @Configuration:

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

Таким чином, коли подання буде створене, він магічно створить UserLister, готовий працювати.

Вищенаведене твердження дійсне з невеликим бонусом, не потребуючи жодного використання XML-файлів та проводки з іншою приміткою, @Autowiredяка знаходить відповідну реалізацію та вводить її.

@Autowired
private UserLister userLister;

Використовуйте @Beanпримітку до методу, який використовується для отримання ін'єкції бобів.


Неправильно. Ви не можете використовувати @Beanпримітку на рівні класу. Повинен бути один з @Component, @Service, і @Repositoryт.д. Rest є правильним. Можливо, вам слід також зазначити, що автоматичне підключення інтерфейсу таким чином працюватиме лише у тому випадку, якщо в класі classpath є лише 1 кандидат-клас, що підходить для ін'єкцій, інакше помилка програми Spring.
Стефано Л

@StefanoL: Так, ти маєш рацію. Цікаво, що люди проігнорували мою помилку. Дякуємо за коментар
Ніколяс

4

Перевага - залежність впорскування (DI) . Це означає аутсорсинг завдання створення об'єкта. Поясню на прикладі.

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

Тепер у моєму коді є клас LunchDecide таким чином:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

У вищевказаному класі, залежно від нашого настрою, ми вибираємо шведський стіл () або Plated (). Однак ця система тісно поєднана. Кожен раз, коли нам потрібен інший тип Об'єкта, нам потрібно змінити код. У цьому випадку, коментуючи рядок! Уявіть, що існує 50 різних класів, якими користуються 50 різних людей. Це було б пекло безладу. У цьому випадку нам потрібно роз’єднати систему. Давайте перепишемо клас LunchDecide.

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

Зауважте, що замість створення об'єкта за допомогою нового ключового слова ми передали посилання на об’єкт типу Lunch як параметр нашому конструктору. Тут створення об'єктів передається в аутсорсинг. Цей код можна з'єднати з використанням конфігураційного файлу Xml (спадщина) або Java Анотації (сучасний). Так чи інакше, рішення про те, який тип об’єкта буде створено, буде прийматися там під час виконання. Об'єкт буде введений Xml в наш код - наш Код залежить від Xml для цієї роботи. Отже, впорскування в залежності (DI). DI не тільки допомагає зробити нашу систему вільно поєднаною, але спрощує написання тестів Unit, оскільки дозволяє глузувати залежності. І останнє, але не менш важливе, DI впорядковує програмування, орієнтовану на аспекти (AOP), що призводить до подальшої розв'язки та збільшення модульності. Також зауважте, що вище DI - це впорскування конструктора.


Але навіть у випадку весни, ми все одно визначатимемо боби. і ідентифікатор квасолі буде вказаний у коді, чи не так? тож якщо завтра змінити квасоля, код все одно доведеться змінити, чи не так? тож яка користь.
Арпан Бух

@ArpanBuch Я думаю, що користь весни полягає в тому, що ви можете вибрати іншу реалізацію, не перекомпілюючи жодного коду (доки інша реалізація вже існує). Я початківець, тому можу помилитися.
byxor

4
  • Весна - це легка та гнучка рамка порівняно з J2EE.
  • Пружинний контейнер виступає як інверсія управління.
  • Spring використовує AOP, тобто проксі, шаблони дизайну Singleton, Factory і Template.
  • Багаторівневі архітектури: розділення проблем та шарів багаторазового використання та просте обслуговування.

введіть тут опис зображення


1
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
tomj0101

3

Весна - хороша альтернатива технології Enterprise JavaBeans (EJB) . Він також має веб-фреймворк та компонент рамок веб-служб.


1
Чи можу я виправити? Була альтернативою (жахливій) EJB 2 ... здається, "новий EJB" (частково JPA 2 тощо) має рішуче прийняття. "Щасливі години" весняної частини "свого роду EJB" здаються минулими. оголошення 2015
Jacek Cz

1

Весна почалася як досить проста система впорскування залежності. Зараз він величезний і в ньому є все (крім прислів’я кухонної мийки).

Але не бійтеся, він досить модульний, тому ви можете використовувати лише потрібні вам частини.

Щоб побачити, з чого все почалося, спробуйте:

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

Це може бути старим, але це відмінна книга.

Ще одну добру книгу, що цього разу виключно присвячена Весні, див:

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

Він також посилається на більш старі версії Spring, але, безумовно, варто їх переглянути.


1

Весна була спочатку ін'єкцією залежності, а потім додайте коротку обгортку майже для всього (обгортка над реалізацією JPA тощо).

Довга історія ... Більшість частин весняних рішень XML (механізм сценаріїв XML ... brrrr), тому для DI я використовую Guice

Хороша бібліотека, але із зростанням depnedenciec, наприклад Spring JDBC (можливо, одне рішення jdbc Java з параметрами реальних імен) береться від maven 4-5 наступного.

Використання Spring MVC (частина "великої весни") для веб-розробки ... це "базована на запитах" рамка, існує свята "запит проти компонента" ... до вас


1
Я вірю, що зараз Spring Framework намагається перейти від XML до Анотацій та конфігурації Java.
Максим

0

Раніше я думав про весняні рамки з суто технічної точки зору.

Враховуючи певний досвід роботи в команді та розвитку корпоративного Webapps - я б сказав, що Spring призначений для більш швидкого розвитку додатків (веб-додатків) шляхом роз'єднання окремих елементів (бобів). Швидше розвиток робить його таким популярним. Весна дозволяє перекладати відповідальність за створення (підключення) програми до рамки Весна. Інжекційна залежність Spring Spring відповідає за підключення / підключення окремих бобів до робочого додатку.

Таким чином розробники можуть бути зосереджені більше на розробці окремих компонентів (бобів), як тільки будуть визначені інтерфейси між квасолею.

Тестування такого застосування просте легко - головна увага приділяється окремим бобам. Їх можна легко відокремити та знущатися, тому тестування одиниць швидко та ефективно.

Весняна рамка визначає кілька спеціалізованих бобів, таких як @Controller ( @Restcontroller ), @Repository , @Component для обслуговування веб-цілей. Весна разом з Maven забезпечують інтуїтивно зрозумілу розробникам структуру. Робота в команді проста і швидка, оскільки є окремі елементи, які відокремлюються і можуть бути використані повторно.


0

Весняні рамки, безумовно, хороші для веб-розробки та більш конкретні для спокійних сервісних програм.

Це добре для вище з - за його ін'єкції залежностей і інтеграції з іншими модулями , такими як ярий безпеки , Spring AOP , MVC Framework , microservices

З будь-яким додатком безпека, швидше за все, є вимогою.
Якщо ви прагнете створити продукт, який потребує тривалого обслуговування, вам знадобиться використовувати концепцію Aop.

Якщо ваш додаток має багато трафіку, збільшуючи навантаження, вам потрібно використовувати концепцію мікропослуг.

Весна надає всі ці особливості на одній платформі. Підтримка багатьох модулів .
Найголовніше, що весна є відкритим кодом та розширюваною рамкою, є гачок скрізь, щоб інтегрувати спеціальний код у життєвий цикл.

Spring Data - це проект, який забезпечує інтеграцію з вашим проектом.


Тож весна може вписатися майже в кожну вимогу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.