تفاوت بین Spring و Spring Boot

تفاوت بین Spring و Spring Boot

مقدمه

قبل از فهم Spring بهتره بفهمیم که فریم ورک چیه؟ فریم ورک یک پلتفورم طراحی قابل استفاده مجدد برای سیستم های نرم افزاری است که کتابخانه های کد و زبان های اسکریپت نویسی مختلفی رو فراهم میکنه. به عبارت ساده فریم ورک برنامه نویسی رو ساده میکنه. فریم ورک هایی برای php, perl, java, python, ruby و خیلی از زبان های برنامه نویسی وجود دارن. همه فریم ورک های نرم افزاری با ایده استفاده مجدد از کد ایجاد شده اند و ابزاری فراهم می کنند که به برنامه نویس ها برای توسعه ترکیب مولفه های متفاوت پروژه نرم افزاری کمک کند.

Spring چیست؟

Spring یک فریم ورک application سبک است و میشه گفت شبیه به فریم ورکی از فریم ورک هاست چون از فریم ورک های مختلفی مثل Struts, Jsp, Hibernate و غیره پشتیبانی می کنه. نسخه اول فریم ورک Spring توسط Rod Johnson در سال 2022 نوشته شد و فریم ورک برای اولین بار سال 2003 تحت عنوان Apache Licence version 2.0 منتشر شد.

Spring Boot چیست؟

اسپرینگ بوت کمک میکنه تا برنامه های stand-alone, production-grade محور ایجاد کنیم. یک فریم ورک java-based برای ایجاد میکروسرویس (میکروسرویس به صورت سرویس های کوچکی که با هم کار میکنند تعریف می شود. میکروسرویس رهیافت معماری است که برنامه را به pool های از سرویس های loosely coupled تقسیم می کند که خواسته های biz را پیاده سازی کنند).

اسپرینگ بوت از دو کلمه spring , boot تشکیل شده است. بخش اول spring نشان دهنده فریم ورک spring است (فریم ورکی که اجازه می دهد برنامه های جاوایی enterprise بنویسید) و بخش دوم boot است که مخفف bootstrap است. ترکیب این دو یعنی چیزی که به شما اجازه می دهد برنامه spring را from scratch بوت استرپ کنید.

در اکتبر 2012 یک مشتری Mike Youngstrom یک درخواست به جیرا فرستاد (جیرا یک برنامه نرم افزاری برای issue tracking و مدیریت پروژه است) که در آن خواسته بود فریم ورک اسپرینگ bootstrap شود به طوری که بتواند فورا launch شود. در نتیجه اسپرینگ بوت در اوایل 2013 توسعه یافت.

تفاوت های کلیدی

اسپرینگ یک فریم ورک application سبک است و می توان گفت شبیه به فریم ورکی از فریم ورک ها است چون از فریم ورک های مختلفی مثل Struts, JSP, Hibernate و غیره پشتیبانی می کند و برای ساخت application ها استفاده می شود در حالیکه Spring Boot یک فریم ورک sptring-based است که در اصل برای توسعه REST API ها استفاده شده.

تفاوت کلیدی یا ویژگی کلیدی Spring بحث Dependency Injection است و برای spring boot بحث autoconfiguration آن است با کمک فریم ورک Spring boot برنامه نویس ها می توانند زمان توسعه، تلاش برنامه نویس را کاهش دهد و بهره وری را افزایش دهد.

تفاوت بین Spring و Spring Boot

  Spring Spring Boot
کجا استفاده می شود Spring یک فریم ورک Java EE است که برای ساخت application ها استفاده میشود فریم ورکی است که در اصل برای توسعه REST API ها استفاده می شود
ویژگی های کلیدی اصلی ترین یا مهمترین ویژگی فریم ورک اسپرینگ Dependency Inejection (یک تکنیک طراحی که وابستگی ها را از کد کامپیوتر حذف می کند نگهداری و تست برنامه را ساده تر می کند ) است.

ویژگی اصلی spring boot بحث autoconfiguration (روش پیکربندی خودکار برنامه Spring بر اساس وابستگی های پیدا شده در classpath است). Autoconfiguration می تواند سرعت را بالا ببرد و توسعه را با حذف نیاز به تعریف برخی beans هایی که بخشی از کلاس های autogonfiguration هستند ساده کند.

چرا استفاده می شود؟ هدف آن ساده کردن توسعه Java EE(Enterprise Edition) و بهره وری بیشتر برنامه نویس است.

یک ویژگی RAD(Rapid Application Development)  برای توسعه سریع تر به فریم ورک Spring می دهد .

نوع توسعه برنامه کمک می کنه تا برنامه loosely coupled بسازیم.

کمک می کند برنامه stand-alone بسازیم.

وابستگی سرورها در فریم ورک اسپرینگ برای تست پروژه اسپرینگ نیاز داریم سرورها را به صورت explict راه اندازی کنیم.

سرورهای buit-in یا جاسازشده مثل Tomcat و jetty را توصیه می کند

Deplopment descriptor برای اجرای برنامه spring یک deployment descriptor نیاز است

هیچ نیازی به deployment descriptor نیست.

پشتیبانی از دیتابیس in-memory پشتیبانی نمی کند

از دیتابیس هایی مثل H2 پشتبانی می کند.

کد Boilerplate حتی برای تسک های حداقلی نیاز به تعداد خیلی زیادی کد (boilerplate code) دارد

از boilerplate code در امان هستید (که موجب کاهش زمان و افزایش بهره بری می شود)

پیکربندی بایستی دستی انجام شود

پیکربندی های پیش فرضی وجود دارد که به bootstrapping سریع تر کمک می کند

وابستگی ها نیاز به تعدادی وابستگی برای ایجاد یک web app دارد.

می تواند یک برنامه را فقط با یک وابستگی شروع به کار کند.  چندین وابستگی بیشتر در طول زمان build مورد نیاز است که به طور پیش فرض در final archive اضافه می شوند.

اعتبارسنجی HTTP HTTP Basic Authentication به منظور توانمندسازی تاییدیه های امنیتی است، آن نشان می دهد که چندین وابستگی و پیکربندی بایستی فعال شوند تا security فعال شود. اسپرینگ نیازمند هر دو وابستگی spring-security-web  و spring-security-config است تا امنیت را در یک برنامه راه اندازی کند. سپس نیاز داریم تا یک کلاس اضافه کنیم که WebSecurityConfigurerAdapter را extend می کند و از انوتیشن @EnableWebSecurity استفاده کنیم.

نیز نیازمند این وابستگی ها است اما ما فقط نیاز داریم وابستگی spring-boot-starter-security را فعال کنیم به طوریکه به طور خودکار همه وابستگی ها مرتبط را به classpath اضافه خواهد کرد.

تست کردن تست در اسپرینگ در مقایسه با اسپرینگ بوت سخت است چون میزان سورس کد زیادی داریم

چون سورس کد کاهش یافته است

پیکربندی xml پیکربندی xml نیاز است

هیچ نیازی به پیکربندی xml نیست

ابزار CLI هیچ ابزار CLI برای توسعه و تست برنامه ها ارائه نمی کند

یک ابزار CLI برای توسعه و تست برنامه های اسپرینگ بوت فراهم می کند

پلاگین ها  فریم ورک اسپرینگ هیچ پلاگینی برای maven, gradle و غیره ارائه نمی کند

پلاگین های build tool برای maven و gradle ارائه می کند. پلاگین ها تنوعی از ویژگی ها شامل بسته بندی jar های قابل اجرا را ارائه می کنند.

 نتیجه گیری

اسپرینگ بوت شامل همه عملکرد فریم ورک اسپرینگ استاندارد است به علاوه اینکه توسعه برنامه را ساده تر می کند. در مقایسه با اسپرینگ شما می توانید یک برنامه را در زمان خیلی کوتاه تری اجرا کنید چون تمام attribute های اسپرینگ بوت auto-configure هستند.

 سوالات پر تکرار

 کدوم رو یاد بگیریم؟ اسپرینگ یا اسپرینگ بوت؟

 اسپرینگ بوت شامل همه عملکرد فریم ورک اسپرینگ استاندارد است به علاوه اینکه توسعه برنامه را ساده تر می کند. در مقایسه با اسپرینگ شما می توانید یک برنامه را در زمان خیلی کوتاه تری اجرا کنید چون تمام attribute های اسپرینگ بوت auto-configure هستند. پس پاسخ اسپرینگ بوت است.

اسپرینگ بوت برای چه کاری بهترین است؟

اسپرینگ بوت به معنی چیزی است که به شما اجازه می دهد تا یک برنامه اسپرینگ را از scratch خودراه اندازی کنید و فریم ورک اسپرینگ بوت در اصل برای توسعه REST API ها است.

آیا اسپرینگ بوت جایگزین اسپرینگ است؟

اسپرینگ بوت به معنی جایگزینی برای اسپرینگ نیست. بلکه به معنی این است که کار با آن ساده تر و سریع تر شود. در نتیجه اهم اصلاحات مورد نیاز برای مهاجرت از برنامه configuration-related هستند.  

چقدر زمان می بره تا اسپرینگ رو یاد بگیریم؟

حدودا یک ماه.

چه موقع نباید از اسپرینگ بوت استفاده کنیم؟

برای پروژه های large-scale مناسب نیست چون اسپرینگ بوت وابستگی های استفاده نشده زیادی ایجاد می کند که منتجر به فایل های استقراری بزرگی می شود.

منبع

https://www.interviewbit.com/blog/spring-vs-spring-boot/#:~:text=The%20key%20difference%20or%20key,Developer%20Effort%2C%20and%20increase%20productivity.