what is Spring? what is Spring Boot | اسپرینگ چیست؟ اسپرینگ بوت چیست؟
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- Spring
یک framework جامع برای توسعه برنامههای کاربردی در زبان Java که شامل container برای مدیریت اجزا، web framework، پشتیبانی از persistence، امنیت، مدیریت زمان اجرا و پشتیبانی از microservice است.
- Container یا Spring Application Context
هسته Spring که وظیفهی ساخت و مدیریت اجزای برنامه را بر عهده دارد. این اجزا بهعنوان bean شناخته میشوند و تمام اجزای نرمافزار در این container به یکدیگر متصل میشوند.
- Bean
یک component که توسط Spring Container ساخته و مدیریت میشود. منطقی است که bean را معادل یک جزء قابلمدیریت در context در نظر بگیریم.
- Component
هر بخش از برنامه که وظیفهی مشخصی را بر عهده دارد. یک برنامه غیرساده از اجزای متعددی تشکیل شده که هر کدام بخشی از قابلیت کلی برنامه را ارائه میدهند.
- Component Coordination
فرآیند ساخت و معرفی اجزا به یکدیگر برای ایجاد یک برنامهی کامل. در کاربرد عادی، این اجزا باید ساخته شده و به هم متصل شوند تا بتوانند با هم همکاری کنند.
- Dependency Injection (DI)
الگویی برای متصل کردن beanها که طی آن، اجزا بهجای ساخت و مدیریت چرخهی عمر وابستگیهای خود، آنها را از یک موجودیت جداگانه دریافت میکنند.
- Dependency
یک object که برای فراهم کردن قابلیت کامل خود، به آن نیاز دارد. مثلاً سرویس محصول برای ارائهی اطلاعات کامل، به سرویس موجودی وابسته است.
- IoC Container
بخشی از Spring که وظیفهی ساخت، حفظ و تزریق beanها را بر عهده دارد و بهجای کد برنامه، مدیریت اجزا را انجام میدهد.
- Constructor Argument Injection
روشی برای تزریق وابستگی که در آن، وابستگی از طریق constructor به bean داده میشود.
- Application Context
فضایی در Spring که beanها در آن ساخته و به هم متصل میشوند تا یک برنامهی کامل را تشکیل دهند.
- XML Configuration
روش قدیمی پیکربندی Spring که در آن اجزا و روابط آنها با یک فایل XML تعریف میشد.
- Java-based Configuration
روش مدرن پیکربندی Spring که در آن، بهجای XML، classهای Java تعریف اجزا و رابطهی آنها را بر عهده دارند.
@Configuration
مشخص میکند که یک class یک کلاس پیکربندی است و beanهای موردنیاز را به Spring Application Context ارائه میکند.
@Bean
روی متدهای کلاس پیکربندی قرار میگیرد و نشان میدهد object برگشتی باید بهعنوان bean در context ثبت شود.
- Component Scanning
تکنیکی در Spring که طی آن، Spring بهصورت خودکار اجزا را از روی classpath برنامه شناسایی کرده و آنها را بهعنوان bean میسازد.
- Autowiring
تزریق خودکار وابستگیها توسط Spring. پس از شناسایی اجزا، Spring بهصورت خودکار وابستگیهای موردنیاز هر bean را فراهم میکند.
- Autoconfiguration
قابلیت کلیدی Spring Boot است که بر اساس classpath، متغیرهای محیطی و سایر عوامل، بهصورت خودکار تشخیص میدهد کدام اجزا باید ساخته و متصل شوند.
- Spring Boot
یک افزونه بر روی Spring Framework که با ارائه قابلیتهایی مانند autoconfiguration، توسعهی برنامههای Spring را بسیار سادهتر کرده است.
- Legacy Configuration
پیکربندی با XML که روش قدیمی تعریف beanها در Spring بود و امروزه بیشتر جای خود را به پیکربندی مبتنی بر Java داده است.
موارد مصاحبه ای
- Spring چیست؟
یک framework جامع برای توسعهی برنامههای Java است که مدیریت اجزا، DI، امنیت، پشتیبانی از web، persistence و microservice را فراهم میکند.
- وظیفهی
Spring Application Contextچیست؟
ایجاد و مدیریت componentها و اتصال آنها در قالب bean برای تشکیل یک برنامهی کامل.
- الگوی اصلی متصل کردن
beanها درSpringچیست؟
Dependency Injection که طی آن، container وظیفهی ساخت و تزریق وابستگیها را بر عهده دارد.
- تفاوت
Dependency InjectionوInversion of Controlچیست؟
IoC اصل کلی است که مدیریت اجزا را از کد برنامه به container منتقل میکند، در حالی که DI یکی از روشهای پیادهسازی آن است که وابستگیها را از بیرون تزریق میکند.
- تفاوت
XML ConfigurationوJava-based Configurationچیست؟
در روش XML، اجزا و روابط با فایل XML تعریف میشود، اما در روش Java، این کار با class و annotation انجام میشود و type safety و قابلیت refactoring بهتری دارد.
@Configurationچه کاری انجام میدهد؟
به Spring اعلام میکند که این class یک کلاس پیکربندی است و beanهای موردنیاز را به context ارائه میکند.
@Beanچه کاربردهایی دارد؟
نشان میدهد object برگشتی از متد باید بهعنوان bean در Spring Application Context ثبت شود.
component scanningچیست؟
مکانیزمی که Spring با استفاده از آن، اجزا را از classpath بهصورت خودکار پیدا کرده و بهعنوان bean میسازد.
autowiringچیست؟
تزریق خودکار وابستگیها توسط Spring به beanهایی که به آنها نیاز دارند.
Spring Boot autoconfigurationچیست؟
تشخیص و پیکربندی خودکار اجزا بر اساس classpath، متغیرهای محیطی و سایر عوامل، بدون نیاز به کد پیکربندی صریح.
- چرا
Java-based configurationبهتر ازXMLاست؟
چون type safety بیشتر، قابلیت refactoring بهتر و مدیریت سادهتری دارد.
- چرا
SpringوSpring Bootمعمولاً بهصورت یکسان در نظر گرفته میشوند؟
چون Spring Boot توسعهی Spring را آنقدر بهبود داده که تصور نوشتن برنامهی Spring بدون آن سخت است؛ بنابراین عموماً Spring Boot بهعنوان ابزار اصلی و Spring XML بهعنوان رویکرد قدیمی استفاده میشود.
سناریو کاربردی
- سناریوی
InventoryServiceوProductService
فرض کنید در یک برنامه، دو سرویس داریم:
- یک سرویس موجودی برای دریافت سطح موجودی کالا.
- یک سرویس محصول برای ارائهی اطلاعات پایهی محصول.
سرویس محصول برای ارائهی اطلاعات کامل، به سرویس موجودی وابسته است. این دو، نمونهای از روابط بین beanها هستند. این رابطه طی فرآیند DI توسط Spring Application Context مدیریت و برقرار میشود.
- روش قدیمی پیکربندی با
XML
در گذشته، دو bean به نامهای InventoryService و ProductService در فایل XML تعریف میشد و وابستگی ProductService به InventoryService از طریق constructor در همان XML برقرار میشد.
- روش مدرن پیکربندی با
Java
در نسخههای جدیدتر، کلاس پیکربندی معادل، با annotationهای @Configuration و @Bean تعریف میشود و همان رابطه را بهصورت type-safe برقرار میکند.
- نتیجهی سناریو
با تکیه بر Spring Boot autoconfiguration، بخش زیادی از پیکربندیهای صریح لازم نیست و برنامه با کمترین کد پیکربندی، کار میکند؛ تا حدی که در مثال این فصل فقط یک خط کد پیکربندی لازم است.
بیشتر بدانید
- نکتهی معماری
هر برنامهی غیرساده از اجزای متعددی تشکیل شده است؛ وظیفهی Spring این است که ساخت و اتصال این اجزا را فراهم کند.
- نکتهی طراحی
بهجای اینکه componentها چرخهی عمر وابستگیهای خود را مدیریت کنند، در DI مسئولیت ساخت و تزریق به container واگذار میشود.
- نکتهی
Spring Boot
Autoconfiguration مانند باد عمل میکند: اثر آن کاملاً دیده میشود، اما کد مشخصی برای آن وجود ندارد؛ همین «نبودِ کد» ماهیت این قابلیت است.
- نکتهی پیکربندی
پیکربندی صریح با Java یا XML تنها زمانی لازم است که Spring نتواند اجزا را بهصورت خودکار شناسایی و متصل کند.
- نکتهی پیشفرض
@Bean
بهطور پیشفرض، id هر bean معادل نام متدی است که آن را تعریف میکند.
- نکتهی نسخهها و بهترین روش
فصلهای کتاب بر این اساس طراحی شدهاند که تا حد امکان از Spring Boot استفاده شود و پیکربندی صریح فقط در مواقع ضروری انجام شود. روش XML قدیمی است و تمرکز اصلی روی پیکربندی Java است.
