CodeGym /وبلاگ جاوا /Random-FA /بهار برای افراد تنبل بنیاد، مفاهیم اولیه و مثال هایی با ک...
John Squirrels
مرحله
San Francisco

بهار برای افراد تنبل بنیاد، مفاهیم اولیه و مثال هایی با کد. قسمت 1

در گروه منتشر شد
بهار برای افراد تنبل بنیاد، مفاهیم اولیه و مثال هایی با کد.  قسمت 1 - 1در این مقاله، قصد ندارم به شما بگویم که چگونه با استفاده از کد من، یک پروژه Spring در 5 دقیقه راه اندازی و اجرا شود. من فقط می‌خواهم اصول اولیه را بنویسم - چیزهایی که ممکن است از آنها بی‌اطلاع باشید و همچنان یک پروژه ایجاد کنید. اما در این مقاله، شما هنوز متوجه نخواهید شد که چه اتفاقی می افتد و مهمتر از آن، چرا.

چارچوب بهار چیست؟

Spring Framework یا به طور ساده Spring یکی از محبوب ترین فریم ورک ها برای ایجاد برنامه های کاربردی وب در جاوا است. چارچوب مانند یک کتابخانه است (شاید شما بیشتر با این اصطلاح آشنا باشید)، اما چیزی وجود دارد که باید در نظر بگیرید. به طور کلی، وقتی از یک کتابخانه استفاده می‌کنید، به سادگی نمونه‌هایی از کلاس‌های موجود در آن ایجاد می‌کنید، متدهای مورد نیاز خود را فراخوانی می‌کنید و در نتیجه به نتیجه‌ای که نیاز دارید می‌رسید. به عبارت دیگر، این رویکرد ضروری تر است: در برنامه خود، شما به صراحت لحظه خاصی را مشخص می کنید که باید کدام شی را ایجاد کنید، چه زمانی باید کدام متد خاص را فراخوانی کنید، و غیره. در چارچوب ها، همه چیز کمی متفاوت است. شما به سادگی چند کلاس از خود می نویسید و مقداری منطق در آنها می نویسید، اما سپس خود فریم ورک نمونه هایی از کلاس های شما را ایجاد می کند و متدهای آنها را فراخوانی می کند. کلاس‌های شما معمولاً برخی از اینترفیس‌ها را از فریم‌ورک پیاده‌سازی می‌کنند یا برخی از کلاس‌های آن را به ارث می‌برند، بنابراین برخی از عملکردهایی را که قبلاً برای شما نوشته شده است، در اختیار شما قرار می‌دهند. اما همیشه اینطور نیست. به عنوان مثال، اسپرینگ تا حد امکان سعی می‌کند از چنین جفت‌گیری محکمی اجتناب کند (جایی که کلاس‌های شما مستقیماً به کلاس‌ها/اینترفیس‌ها در چارچوب بستگی دارند). برای رسیدن به این هدف از حاشیه نویسی استفاده می کند. بعداً به این موضوع باز خواهیم گشت. اما درک این نکته مهم است که Spring فقط مجموعه‌ای از کلاس‌ها و رابط‌هایی است که برای استفاده در دسترس شما هستند :) همچنین می‌خواهم فوراً خاطرنشان کنم که Spring می‌تواند نه تنها برای برنامه‌های تحت وب، بلکه برای رایج‌ترین برنامه‌های کنسول نیز استفاده شود. که برای همه ما آشناست و حتی امروز یکی از آنها را می نویسیم.

ساختار

اما Spring فقط یک چارچوب خاص نیست. بلکه یک نام رایج برای اشاره به چندین فریمورک کوچک است که هر کدام نوع خود را انجام می دهند. بهار برای افراد تنبل بنیاد، مفاهیم اولیه و مثال هایی با کد.  قسمت 1 - 2

https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
شکل 2.1. مروری بر چارچوب بهار

همانطور که می بینید، Spring ماژولار است. این به ما امکان می‌دهد فقط ماژول‌هایی را که برای برنامه‌مان نیاز داریم وصل کنیم و آن‌هایی را که مشخصاً از آنها استفاده نمی‌کنیم وصل نکنیم. تا آنجا که من می دانم، همین رویکرد بود که به اسپرینگ اجازه داد از رقیب آن زمان خود (EJB) پیشی بگیرد و پیشتاز شود. اپلیکیشن‌هایی که از EJB استفاده می‌کردند وابستگی‌های زیادی را پشت سر خود می‌کشیدند و در نتیجه، کند و کند بودند. تصویر نشان می دهد که چارچوب Spring از چندین ماژول تشکیل شده است:
  • دسترسی به داده ها
  • وب
  • هسته
  • و بیشتر
امروز ما با برخی از مفاهیم موجود در ماژول اصلی آشنا خواهیم شد: لوبیا، زمینه و موارد دیگر. همانطور که ممکن است حدس بزنید، ماژول دسترسی به داده حاوی ابزارهایی برای کار با داده ها (عمدتا پایگاه داده) است و ماژول وب برای کار بر روی شبکه (از جمله ایجاد برنامه های کاربردی وب، که بعداً مورد بحث قرار خواهد گرفت) است. علاوه بر این، یک زیرساخت جامع وجود دارد که از Spring پشتیبانی می کند: بسیاری از پروژه های دیگر که به طور رسمی در خود چارچوب گنجانده نشده اند، اما به طور یکپارچه در پروژه Spring شما ادغام شده اند (به عنوان مثال، Spring Security، که امیدوارم به آن اشاره کنم، برای احراز هویت یک کاربر در یک وب سایت).

چرا جاوا فریم ورک Spring دارد؟

خوب، علاوه بر این که شیک، شیک و تازه است، همین الان می توانم بگویم که به محض اینکه مهارت کمی در استفاده از Spring بدست آورید، متوجه خواهید شد که چگونه انواع کار وجود دارد که دیگر ندارید. انجام دادن، و چقدر کار بهار بر عهده خود است. می‌توانید چند خط تنظیمات پیکربندی بنویسید و چند کلاس بنویسید، و در نهایت با یک پروژه کار می‌کنید. اما به محض اینکه شروع به تعجب کردید که چه مقدار چیز در زیر هود است، چه مقدار کار در حال انجام است و چه مقدار کد باید بنویسید اگر می خواهید همان پروژه را بر اساس سرورهای ساده یا سوکت ها و جاوا خالص پیاده سازی کنید. موهای شما سیخ خواهد شد :) بهار حتی به عنوان نوعی جادو توصیف می شود. وقتی می‌بینید که همه چیز کار می‌کند، این را تجربه می‌کنید، اما همچنین تصور تقریبی از نحوه و مقدار کار در پشت صحنه دارید - بنابراین به نظر می‌رسد که واقعاً نوعی جادو در عمل وجود دارد :) بهتر است آن را جادو بنامید. به جای اینکه سعی کنید توضیح دهید که چگونه همه چیز به هم مرتبط است. :) دومین استدلال به نفع مطالعه بهار این است که تقریباً 90٪ از فرصت های شغلی برای توسعه دهندگان جوان (براساس مشاهدات شخصی من) به دانش یا حداقل یک ایده کلی از آنچه که Spring's ، , و ماژول ها به توسعه دهندگان پیشرفته ارائه می دهند Dataنیاز Web MVCدارد Security:) اما امروز فقط در مورد اصول اولیه است.

DI/IoC

اگر تا به حال سعی کرده اید در مورد Spring مطالعه کنید، اولین چیزی که با آن مواجه شدید احتمالاً این کلمات اختصاری است: DI/IoC. اکنون به شدت توصیه می کنم که از این مقاله فاصله بگیرید و این مقاله DZone را بخوانید ! IoC مخفف Inversion of Control است. من قبلاً به این موضوع اشاره کردم وقتی نوشتم که استفاده از کتابخانه شامل این می شود که شما در کد خود مشخص کنید که کدام روش را روی کدام شیء فراخوانی کنید، اما استفاده از یک چارچوب عموماً به این معنی است که فریم ورک در زمان مناسب کد شما را فراخوانی می کند. به عبارت دیگر، در این مورد اخیر، شما دیگر فرآیند اجرای کد/برنامه را مدیریت نمی‌کنید - چارچوب این کار را برای شما انجام می‌دهد. شما کنترل را به چارچوب (وارونگی کنترل) منتقل کردید. DI مخفف Dependency Injection است . با تزریق وابستگی، در روش اصلی اشیاء گربه ایجاد نمی کنید و سپس آنها را به روش های خود منتقل نمی کنید. در عوض، Spring Framework آنها را برای شما ایجاد می کند. شما به سادگی می گویید "من می خواهم یک گربه اینجا بگیرم" و چارچوب در روش شما یکی را به شما منتقل می کند. این مخفف را در مقالات بعدی خواهیم دید.

لوبیا و زمینه

یکی از مفاهیم کلیدی در بهار، لوبیا است. در واقع، این فقط یک شی از یک کلاس است. فرض کنید برنامه ای داریم که به 3 شیء نیاز دارد: یک گربه، یک سگ و یک طوطی. و ما دسته ای از کلاس ها با دسته ای از متدها داریم. گاهی برای یک روش به گربه نیاز داریم، گاهی برای روشی دیگر به سگ نیاز داریم و گاهی اوقات روش های ما هم به گربه و هم به طوطی نیاز دارند (مثلا روش غذا دادن به گربه ها-ها). برای روش های دیگر، هر سه شی مورد نیاز است. بله، ابتدا می‌توانیم این سه شی را در متد main ایجاد کنیم و سپس به کلاس‌های خود منتقل کنیم و سپس در داخل این کلاس‌ها آن‌ها را به متدهای مربوطه منتقل کنیم... و به همین ترتیب در کل برنامه. اما اگر همچنین فرض کنیم که گهگاه می‌خواهیم لیست پارامترهای ورودی را برای متدهای خود تغییر دهیم (مثلاً تصمیم می‌گیریم چیزی را بازنویسی کنیم یا عملکرد جدیدی اضافه کنیم)، باید تغییرات زیادی در کد ایجاد کنیم. و حالا تصور کنید که ما نه 3، بلکه 300 شیء از این دست داریم. یک جایگزین این است که همه اشیاء خود را در یک لیست جمع آوری کنیم ( List<Object>)، آن را به هر متد ارسال کنیم و سپس در داخل متدها، شی لازم را دریافت کنیم. اما همانطور که برنامه اجرا می شود، اگر یک شی به این لیست اضافه شود چه می شود، یا بدتر از آن، اگر یکی حذف شود چه؟ این پتانسیل را دارد که هر روشی را که در آن از یک شاخص برای دریافت اشیاء از لیست استفاده می کنیم، شکسته شود. برای جلوگیری از این مشکل، تصمیم می گیریم اشیاء خود را نه در یک لیست، بلکه در نقشه ذخیره کنیم، جایی که کلید نام شی و مقدار خود شی است. این به ما این امکان را می دهد که اشیایی را که نیاز داریم به سادگی با استفاده از نام آنها بازیابی کنیم، به عنوان مثال get("طوطی")، و در پاسخ، شی طوطی را دریافت می کنیم. یا کلید می تواند کلاس شی باشد و مقدار می تواند خود شی باشد. در این مورد، به جای تعیین نام شیء، اما فقط می تواند کلاس شی مورد نیاز خود را مشخص کند. این نیز راحت است. یا حتی می‌توانیم نوعی پوشش برای نقشه بنویسیم، جایی که برخی از متدها اشیاء را با نام خود دریافت می‌کنند و متدهای دیگر، اشیاء را با کلاس خود دریافت می‌کنند. آنچه ما در اینجا به آن رسیدیم، یک زمینه کاربردی در چارچوب Spring نامیده می شود. زمینه مجموعه ای از لوبیا (اشیاء) است. ما به یک متن دسترسی داریم تا لوبیا (شیء) مورد نیاز خود را با نام، نوع آن یا به وسیله دیگری بدست آوریم. علاوه بر این، می‌توانیم از خود Spring بخواهیم که در زمینه‌ی خود به دنبال bean مورد نیاز ما برود و آن را به روش ما منتقل کند. برای مثال، فرض کنید روشی مانند این داشتیم:
public void doSomething(Cat cat) {
    ...
}
وقتی اسپرینگ این متد را فراخوانی کرد، شی گربه ما را از بافت آن برداشت و به متد ارسال کرد. اما حالا تصمیم گرفتیم که روش ما علاوه بر گربه، به طوطی هم نیاز دارد. با بهار، هیچ چیز نمی تواند آسان تر باشد! ما به سادگی می نویسیم:
public void doSomething(Cat cat, Parrot parrot) {
    ...
}
حالا وقتی اسپرینگ متد ما را فراخوانی می کند، نیاز به پاس دادن به یک گربه و یک طوطی را می فهمد، بنابراین به متن خود می رود، این دو شی را دریافت می کند و آنها را به متد ما منتقل می کند. با انتقال افسار کنترل به Spring، مسئولیت ایجاد اشیاء و انتقال آنها را نیز به متدهای خود که اسپرینگ فراخوانی خواهد کرد، واگذار می کنیم. این سؤال پیش می‌آید: چگونه بهار می‌داند کدام اشیاء (لوبیا) را ایجاد کند؟

راه های پیکربندی برنامه

سه راه اصلی برای پیکربندی یک برنامه وجود دارد ، یعنی روش‌هایی که به Spring دقیقاً به کدام اشیاء نیاز داریم:
  1. فایل های پیکربندی XML
  2. پیکربندی مبتنی بر جاوا
  3. پیکربندی خودکار
سازندگان بهار آنها را به ترتیب اولویت بندی می کنند:
  • روش با اولویت بالا، که باید ترجیح داده شود، پیکربندی خودکار است
  • اگر نمی توان از پیکربندی خودکار برای پیکربندی صحیح همه دانه های ممکن استفاده کرد، از پیکربندی مبتنی بر جاوا (که شامل ایجاد اشیاء با استفاده از کد جاوا است) استفاده کنید.
  • و روش با کمترین اولویت روش قدیمی است - با استفاده از فایل های پیکربندی XML.
بهار همچنین به ما امکان می دهد این روش ها را ترکیب کنیم. به عنوان مثال، اجازه دهید Spring هر چیزی را که می‌توان به طور خودکار پیکربندی کرد، پیکربندی کند، از پیکربندی مبتنی بر جاوا در هر کجا که به پارامترهای خاصی نیاز دارید استفاده کنید، و از XML برای هر پیکربندی قدیمی استفاده کنید. همه اینها کاملاً انعطاف پذیر است. با این حال، اگر همه چیز را می توان به طور خودکار پیکربندی کرد، آن گزینه را انتخاب کنید. من فقط پیکربندی خودکار و پیکربندی مبتنی بر جاوا را در نظر خواهم گرفت. تنظیمات XML تقریباً در هر نمونه از Spring در اینترنت استفاده می شود. علاوه بر این، هنگامی که متوجه شدید که پیکربندی مبتنی بر جاوا چگونه کار می کند، با خواندن یک فایل XML که همان کار را انجام می دهد، مشکلی ندارید. پیکربندی خودکار زمانی استفاده می شود که باید با اشیاء کلاس هایی که نوشته ایم کار کنیم. اگر ایجاد یکی از اشیاء ما نیاز به منطق بسیار خاصی دارد، یا اگر نتوانیم کلاسی با حاشیه نویسی لازم برای پیکربندی خودکار ایجاد کنیم، می‌توانیم از پیکربندی مبتنی بر جاوا برای انجام کارهایی که باید انجام شود استفاده کنیم. در قسمت بعدی ، ما یک پروژه Maven ایجاد می کنیم، چند ماژول اصلی Spring را به هم وصل می کنیم و اولین دانه های خود را ایجاد می کنیم.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION