سلام! در حال حاضر، محبوب ترین جهت توسعه برای یک توسعه دهنده با دانش جاوا، توسعه وب است. البته برای این تخصص فهرستی از فناوری های مورد نیاز برای مطالعه وجود دارد. یکی از اصلی ترین آنها بهار است . ممکن است استدلال کنید که می توانید جاوا EE را یاد بگیرید . البته این درست است، اما اکنون اکثریت قریب به اتفاق پروژههای جدید از Spring استفاده میکنند ، که عملاً آن را به فناوری پیشفرض و اجباری برای توسعهدهندگان وب جاوا تبدیل کرده است. و اگر می خواهید با نیازهای بازار همراه شوید، باید آن را مطالعه کنید. امروز میخواهم در مورد Spring صحبت کنم ، یعنی دید خود را نسبت به آن کمی گسترش دهم: در مورد تاریخچه ایجاد آن، تفاوتهای کلیدی با پشته Java EE صحبت کنید و یک نمای کلی از اجزای کلیدی پشته Spring ارائه دهید . بیا شروع کنیم!
1. چگونه و چه زمانی بهار ظاهر شد و در طول زمان به چه چیزی تبدیل شد
همه چیز در اکتبر 2002 شروع شد ، زمانی که راد جانسون کتاب "طراحی و توسعه متخصص یک نفره J2EE" را نوشت: در این کتاب که توسط Wrox منتشر شده است ، نویسنده وضعیت توسعه سازمانی جاوا را در آن زمان توصیف می کند و به تعدادی از موارد اشاره می کند. کاستی های Java EE و محیط های (Enterprise Java Bean)EJB . در همان زمان، راد جانسون راهحل سادهتری را بر اساس کلاسهای جاوای معمولی (POJO - اشیاء قدیمی جاوا) و تزریق وابستگی پیشنهاد میکند. او در این کتاب توضیح می دهد که چگونه می توانید بدون استفاده از EJB یک برنامه رزرو آنلاین با کیفیت بالا و مقیاس پذیر ایجاد کنید. آن ها او به وضوح نشان داد که چگونه می توان پیچیدگی توسعه برنامه را حذف کرد و استفاده از JavaBeans ساده را برای دستیابی به همه چیزهایی که قبلاً فقط با استفاده از EJB ممکن بود ممکن کرد. با این حال، دامنه Spring به توسعه اجزای نرم افزاری که در سمت سرور اجرا می شوند محدود نمی شود. هر برنامه جاوا می تواند از مزایای فریمورک از نظر سادگی، آزمایش پذیری و اتصال آزاد استفاده کند. طراحی توسعه J2EE او به یک موفقیت فوری تبدیل شد. بسیاری از کدهای برنامه که به صورت رایگان به عنوان بخشی از کتاب ارائه شده بودند، قابل استفاده مجدد بودند و تعدادی از توسعه دهندگان به زودی شروع به استفاده از آن در پروژه های خود کردند. Wrox یک صفحه وب برای کتاب با کد منبع و وصلهها داشت. آنها همچنین یک انجمن آنلاین برای این کتاب فراهم کردند. در فوریه 2003، توسعه دهندگان Jürgen Heller و Jann Karoff راد جانسون را متقاعد کردند که یک پروژه منبع باز بر اساس کد چارچوب ایجاد کند. از آن لحظه به بعد، راد، یورگن و یان همکاری خود را برای خلق چیزی کاملاً جدید آغاز کردند. در واقع، این یان کاروف بود که نام «بهار» را برای چارچوب جدید ارائه کرد. در اینجا منظور این بود که بهار مانند بهار است: شروعی جدید پس از "زمستان" J2EE سنتی.
در ژوئن 2003، Spring 0.9 تحت مجوز Apache 2.0 منتشر شد.
Spring 1.0 در مارس 2004 منتشر شد. جالب اینجاست که حتی قبل از انتشار Spring 1.0، نسخه قبلی 0.9 بسیار مورد استقبال قرار گرفت و مورد استقبال گسترده قرار گرفت.
در آگوست 2004، راد جانسون، یورگن هلر، کیت دونالد و کالین سامپلئانو ، شرکت مشاوره، آموزش و پشتیبانی Spring21 را با هم تأسیس کردند .
اکتبر 2006: Spring 2.0 منتشر شد که فایل های پیکربندی XML را ساده می کند.
Spring 2.5 که در نوامبر 2007 منتشر شد، تنظیمات حاشیه نویسی را معرفی کرد.
Spring 3.2 که در دسامبر 2012 منتشر شد، پیکربندی جاوا را معرفی کرد، جاوا 7، Hibernate 4، Servlet 3.0 را پشتیبانی کرد و همچنین حداقل به جاوا 1.5 نیاز داشت.
یان کاروف خیلی زود تیم را ترک کرد. راد جانسون در سال 2012 تیم بهار را ترک کرد. یورگن هلر هنوز یکی از اعضای فعال تیم توسعه Spring است.
Spring 4.0 که در سال 2014 منتشر شد، پشتیبانی از جاوا 8 را اضافه کرد.
همچنین در سال 2014 چکمه بهار به دنیا معرفی شد.
Spring 5.0 در سال 2017 منتشر شد. مانند Spring Boot 2.x که از Spring 5 پشتیبانی می کند.
در واقع، اینگونه است که چارچوب مورد علاقه ما به چیزی تبدیل شد که اکنون می شناسیم.
2. Spring vs Java EE
بیایید یک مقایسه کوچک از دو پشته کلیدی جاوا برای توسعه دهندگان وب انجام دهیم: Spring و Java EE.
جاوا EE
مزایای
ایرادات
برنامه های نوشته شده در Java EE قابل اطمینان تر، ایمن تر و مقیاس پذیرتر در نظر گرفته می شوند
Java EE یک استاندارد API مورد تایید صنعت است
عمدتاً بر اساس حاشیه نویسی و CDI (تزریق زمینه و وابستگی)، درست مانند Spring
پیاده سازی بر اساس کانتینرهای EJB و POJO
برنامه های پیچیده با تعداد تراکنش های زیاد توسط JEE به خوبی مدیریت می شوند
استفاده موفقیت آمیز برای یک برنامه یکپارچه مقیاس پذیر
Java EE زبان OOP مخصوص به خود را دارد که شامل یک سبک و نحو خاص است
یک محیط توسعه برنامه بسیار پیچیده که درک آن برای مبتدیان دشوار است (و گاهی اوقات برای افراد مسن نیز)
هزینه نهایی پروژه، از جمله طراحی، استقرار و توسعه برنامه، ممکن است بسیار زیاد باشد
Java EE با مجوز Oracle برای سازمانها و شرکتهایی طراحی شده است که به محیطی قابل انطباق و قابل توزیع برای ساخت برنامههای کاربردی در بازار انبوه نیاز دارند. مانند Spring، Java EE شامل کتابخانه های اضافی برای دسترسی به پایگاه داده (JDBC، JPA)، احضار مهندسی از راه دور (RMI)، اطلاعات (JMS)، مدیریت وب، پردازش XML و مشخصه APIهای استاندارد برای JavaBeans سازمانی، پورتلت ها، Servlets، صفحات سرور جاوا، و غیره. هدف اساسی Java EE این است که مشکلات عمده ای را که توسعه دهندگان در مورد ساخت برنامه های فعلی با استفاده از API های مختلف با آن مواجه هستند، آشکار کند. در عین حال، توسعه در Java EE از پیچیدگی بالایی برخوردار است، که نه تنها برای مبتدیان، سطح را به شدت بالا می برد. و درک عملکردهای قبلاً نوشته شده برای متخصصان با تجربه می تواند دشوار باشد، بنابراین توسعه در Java EE بیشتر طول می کشد و بر این اساس، گران تر است. در مورد Java EE به طور خلاصه می توان گفت: پیچیده، اما انعطاف پذیر. خب حالا بیایید کمی در مورد بهار صحبت کنیم .
بهار
مزایای
ایرادات
به شما امکان می دهد تعاملات شی را به طور مؤثر سازماندهی کنید
ساده تر از Java EE
بر اساس IOC و AOP اجرا شده است که اتصال شل برنامه ها را تضمین می کند
بر اساس XML، Groovy یا پیکربندی حاشیه نویسی کار می کند
به شما امکان می دهد از اشیاء ساده جاوا قدیمی استفاده کنید - POJO ها، توسعه دهندگان به یک ظرف سازمانی مانند سرور برنامه نیاز ندارند
سطح بالایی از ماژولار بودن را برای توسعه دهندگان جاوا فراهم می کند
پیادهسازی کتابخانههای Java EE را ارائه میکند، اما به روش خاص خود، استفاده از آنها را بسیار آسانتر میکند
مجوز منبع باز
Spring Boot راه اندازی اولیه برنامه را تا حد زیادی ساده می کند
تست کد برنامه فنری عموماً آسان است
توسعه بهار نسبتاً دشوار است زیرا تمرکز واضحی ندارد
برای یک توسعه دهنده جدید جاوا، یادگیری فریم ورک Spring می تواند چالش برانگیز باشد (اما هنوز هم آسان تر از Java EE)
بهار کندتر از Java EE است
Spring یک چارچوب جاوا منبع باز برای مشاغل بزرگ است. هدف چارچوب Spring ارائه سادهترین پیادهسازی ممکن ایدههای J2EE و بهرهگیری از شیوههای برنامهنویسی عالی با گسترش قابلیتهای مدل برنامهنویسی مبتنی بر POJO است. آن ها Java EE بیشتر یک استاندارد رسمی است، در حالی که Spring بیشتر یک چارچوب است که این استاندارد را به روش خود پیاده سازی می کند.
نتایج مقایسه
در درک من، Java EE و Spring مانند JDBC و Hibernate هستند، جایی که JDBC یک فناوری سریعتر است، اما در عین حال کدهای غیر ضروری زیادی دارد. و Hibernate در حال حاضر از JDBC استفاده می کند، اما در عین حال توسعه را به طور قابل توجهی ساده و کاهش می دهد (البته برخی محدودیت ها را اعمال می کند). نمی توان با اطمینان گفت که کدام یک از آنها بهتر است. این نیز تا حدودی یادآور این سوال است: کدام بهتر است - ArrayList یا LinkedList. پس از همه، پاسخ یکسان خواهد بود - بسته به موقعیت. هر یک از آنها نقاط قوت و ضعف خاص خود را دارند و شما باید با دقت از بین آنها انتخاب کنید و وضعیت خود را بسنجید و درک کنید که اکنون کدام یک از آنها بیشترین سود را به همراه خواهد داشت.
3. اجزای فنری
خب حالا بیایید کمی در مورد فریمورک هایی که Spring را تشکیل می دهند صحبت کنیم.
چارچوب بهار
این ماژول اصلی است که یک مدل برنامهنویسی و پیکربندی جامع برای برنامههای کاربردی سازمانی مدرن مبتنی بر جاوا در هر پلت فرم استقرار ارائه میکند. این شامل بسیاری از فن آوری های اصلی (هسته) Spring است :
AOP - برنامه نویسی جنبه گرا - برنامه نویسی جنبه گرا با هدف اجرای منطق انتها به انتها.
MVC و WebFlux - چارچوب هایی برای تعامل وب.
JDBC ، ORM - فن آوری برای تعامل با پایگاه های داده.
تست - عملکرد برای آزمایش شفاف و بدون عارضه دادههای کانتینر Spring.
SpEL - Spring Expression Language - زبان عبارت Spring;
و غیره.
چکمه بهاره
با به حداقل رساندن تنظیمات اولیه برنامه و پیکربندی خودکار عناصر برنامه Spring، ایجاد برنامه های کاربردی مبتنی بر Spring را ساده می کند. نمونه ای از راه اندازی بوت بهار در 5 دقیقه
داده های بهار
به طور قابل توجهی استفاده از فناوری های دسترسی به داده ها، پایگاه های داده رابطه ای و غیر رابطه ای را ساده می کند (کدهای تکراری را حذف می کند و تعامل با داده ها را ساده می کند). این مقاله حاوی یک آموزش خوب در مورد اتصال Spring Data است.
ابر بهار
در معماری میکروسرویس، سادهسازی تعامل میکروسرویسها با یکدیگر و خودکارسازی استقرار برنامهها بر روی پلتفرمهای ابری مانند AWS ، Azure و غیره استفاده میشود. آموزش مفصل Spring Cloud را اینجا ببینید ، اما من به شما هشدار می دهم که این موضوع آسان نیست و متخصصان نزدیک به سطح ارشد را هدف قرار می دهد.
امنیت بهار
یک ابزار قدرتمند و قابل تنظیم احراز هویت (احراز هویت) و کنترل دسترسی (مجوز) برای یک برنامه کاربردی ارائه می دهد. می توانید یک مثال ساده از اتصال Spring Security به برنامه خود را در این پست پیدا کنید .
Spring GraphQL
این ماژول از برنامه های Spring ساخته شده بر روی GraphQL Java پشتیبانی می کند. GraphQL یک زبان پرس و جو برای API ها است که به مشتریان اجازه می دهد مجموعه محدودی از داده های مورد نیاز خود را پرس و جو کنند، که به نوبه خود اجازه می دهد تا داده ها در تعداد محدودی پرس و جو جمع آوری شوند. اگر قبلاً با JPA آشنا هستید، ممکن است قبلاً با EntityGraph با مفهومی مشابه (یا مشابه) برخورد کرده باشید. در اینجا می توانید اطلاعات بیشتری در مورد GraphQL بخوانید .
جلسه بهاره
این بخش از چارچوب Spring APIها و پیادهسازیهایی را برای مدیریت اطلاعات جلسه کاربر ارائه میکند (دادههای جلسه کاربر در فضای ذخیرهسازی دائمی مانند Redis ، MongoDb ، HazelCast و غیره ذخیره میشوند). نمونه ای از استفاده از Spring Session را می توانید در اینجا بیابید .
ادغام بهار
این ماژول برای ساده سازی پیام رسانی در برنامه های کاربردی مبتنی بر Spring و پشتیبانی از ادغام با سیستم های خارجی از طریق آداپتورهای اعلامی طراحی شده است. این آداپتورها سطح بالاتری از انتزاع را نسبت به پشتیبانی Spring از راه دور، پیامرسانی و زمانبندی ارائه میکنند. مقاله مفصل .
استراحت بهار
مجموعه ای غنی از ابزارها را ارائه می دهد که توسعه REST API را ساده می کند: ابزارهایی برای مسیریابی درخواست ها، برای تبدیل JSON/XML به اشیاء از انواع مورد نیاز و غیره. نمونه ای از خدمات RESTful در بهار را می توان در این مطالب یافت .
جریان وب بهار
Spring Web Flow مبتنی بر Spring MVC است و به شما امکان می دهد "جریان" یک برنامه وب را پیاده سازی کنید. چنین جریانهایی مجموعهای از مراحل را در بر میگیرند که کاربر را در تکمیل برخی وظایف تجاری راهنمایی میکند. آنها چندین درخواست HTTP را شامل می شوند، حالتی هستند، با داده های تراکنش کار می کنند، قابل استفاده مجدد هستند و می توانند ماهیت پویا و بادوام داشته باشند. نمونه ای از اتصال Spring Web Flow را می توان در این راهنما به زبان انگلیسی مشاهده کرد .
خدمات وب بهار
این ماژول به گونهای طراحی شده است که با استفاده از یکی از روشهای مختلف دستکاری بارهای XML، توسعه سرویسهای SOAP مبتنی بر قرارداد را آسانتر میکند. SOAP - Simple Object Access Protocol - یک پروتکل ساده برای دسترسی به اشیا.
این ماژول برخی از APIها را فراهم می کند تا ایجاد کنترلرهای REST را که از اصل HATEOAS در هنگام کار با Spring و به خصوص Spring MVC پیروی می کنند، آسان تر کند. HATEOAS - Hypermedia As The Engine Of Application State - Hypermedia به عنوان موتور حالت برنامه. می توانید استفاده از این کتابخانه Spring را در اینجا مشاهده کنید .
دسته بهار
این ماژول قابلیت پردازش دسته ای داده ها را فراهم می کند (زمانی که داده ها در قطعات بزرگ پردازش می شوند) که برای عملکرد روزانه سیستم های شرکتی حیاتی است. Spring Batch ویژگی های قابل استفاده مجددی را ارائه می دهد که برای رسیدگی به حجم زیادی از سوابق مورد نیاز است، از جمله ثبت / ردیابی، مدیریت تراکنش، آمار پردازش کار، راه اندازی مجدد کار، پرش و مدیریت منابع. در این لینک می توانید یک بررسی جالب در مورد Spring Batch پیدا کنید .
بهار AMQP
این ماژول مفاهیم اصلی Spring را برای توسعه راه حل های پیام رسانی مبتنی بر AMQP اعمال می کند. این یک الگو به عنوان یک انتزاع سطح بالا برای ارسال و دریافت پیام ارائه می دهد. همچنین از POJO های پیام محور با یک ظرف شنونده پشتیبانی می کند. AMQP - Advanced Message Queuing Protocol - Advanced Message Queuing Protocol. این پروژه شامل دو بخش است: Spring-amqp انتزاع پایه است و Spring-rabbit اجرای RabbitMQ است . مثال با اتصال RabbitMQ با استفاده از Spring
بهار برای آپاچی کافکا
این پروژه مفاهیم اصلی Spring را برای توسعه راه حل های پیام رسانی مبتنی بر کافکا به کار می برد . یک الگو به عنوان یک انتزاع سطح بالا برای ارسال پیام ارائه شده است. همچنین از POJO های پیام محور با حاشیه نویسی های لازم و یک ظرف شنونده پشتیبانی می کند. در اینجا شباهت آشکاری با Spring AMQP وجود دارد، اما این ماژول به طور خاص برای کافکا اقتباس شده است. نمونه ای از اتصال بهار کافکا را می توانید در اینجا مشاهده کنید .
Spring CredHub
پشتیبانی سمت سرویس گیرنده را برای ذخیره، بازیابی و حذف اعتبارنامه ها از یک سرور CredHub در حال اجرا بر روی پلت فرم Cloud Foundry ارائه می دهد . CredHub - یک API برای ذخیره ایمن، ایجاد، بازیابی و حذف انواع مختلف اعتبارنامه ها ارائه می دهد. Spring CredHub یک اتصال جاوا برای CredHub API فراهم می کند، که ادغام برنامه های Spring با CredHub را آسان می کند.
FLO بهار
این یک کتابخانه جاوا اسکریپت است که یک طراح بصری قابل جاسازی ساده HTML5 برای خطوط لوله و نمودارهای ساده برای نظارت بر جریان و داده های دسته ای ارائه می دهد. دموی این فناوری در ویدیوی لینک موجود است .
فنری LDAP
این کتابخانه عملیات LDAP را ساده می کند و بر اساس Spring JdbcTemplate است. این چارچوب امکان جستجو و بستن زمینه، مشاهده نتایج، رمزگذاری/رمزگشایی مقادیر، فیلترها و موارد دیگر را میدهد (ساخته شده بر اساس همان اصول Spring Jdbc). نمونهای از اجرای Spring LDAP را میتوانید در اینجا پیدا کنید .
بهار رو
این ماژول یک ابزار RAD را ارائه می دهد که می تواند برنامه مبتنی بر Spring شما را ایجاد و مدیریت کند. هدف آن بهبود بهره وری توسعه دهندگان جاوا است. نمی تواند منطق تجاری برنامه شما را بنویسد، اما می تواند تنظیمات و زیرساخت ها را مدیریت کند.
این کتابخانه با تکیه بر شیشههای Spring Shell و افزودن دستورات خود (که به عنوان روشهایی در Spring beans میآیند) ایجاد یک برنامه با ویژگیهای کامل (که به عنوان خط فرمان نیز شناخته میشود) را آسان میکند. ایجاد یک برنامه خط فرمان می تواند مفید باشد، به عنوان مثال، برای تعامل با REST API پروژه شما یا برای کار با محتوای فایل محلی. ادامه مطلب اینجا و اینجا .
دستگاه دولت بهار
این ماژول به توسعه دهندگان برنامه اجازه می دهد تا از مفاهیم ماشین حالت با برنامه های Spring استفاده کنند. نمونه دقیق استفاده از این قابلیت را می توانید در اینجا و اینجا بیابید .
خزانه بهار
Spring Vault انتزاعات Spring آشنا و پشتیبانی سمت مشتری را برای دسترسی، ذخیره و ابطال اسرار فراهم می کند. این انتزاعات سطح پایین و سطح بالا را برای تعامل با Vault ارائه می دهد و کاربر را از نگرانی های زیرساخت رها می کند. مثالی از اجرای Spring Vault "آیا باید همه اینها را یاد بگیرم؟" - با تعجب می پرسی. نترس! این اشتباه است! به طور دقیق تر، نه کاملاً اینطور. این لیست کاملی از فناوری های موجود در بهار بود. فهرست فن آوری هایی که یک مبتدی باید بداند بسیار ساده تر است:
هسته فنری
چکمه بهاره
Spring Web (MVC و REST)
Spring Data (Spring ORM، Spring JDBC، Spring JPA)
تست بهار
همچنین فناوریهای دیگری نیز وجود دارند که اغلب در پروژهها یافت میشوند، اما به دلیل پیچیدگیشان، معمولاً توسعهدهندگان با تجربهتر به جای تازهکارهای سبز با آنها سروکار دارند. با این حال، برای مبتدیان نیز مفید است که حداقل یک درک کلی از موارد زیر داشته باشند:
امنیت بهار
بهار AOP
ابر بهار
سایر فناوری ها بسیار کمتر مورد استفاده قرار می گیرند، بنابراین برای کار بر روی یک پروژه خاص فقط باید آنها را به طور جدی مطالعه کنید. به هر حال، می توانید چک لیست کاملی از آنچه که یک توسعه دهنده جاوا باید بداند را در مقاله دیگر من بیابید. این همه برای امروز است، به زودی همه شما را می بینم!
GO TO FULL VERSION