در آموزش قبلی یک برنامه بسیار ساده با Spring نوشتیم و دیدیم که ارتباط بین اشیا (wiring) و استنتاج لازم برای ساخت آبجکت ها توسط خود Spring صورت گرفت.
Spring Container هسته اصلی فریم ورک Spring است و مسئولیت ساخت اشیا ، ایجاد ارتباط بین آن ها (wiring) ، پیکره بندی آن ها (configure) و مدیریت چرخه طول عمر آبجکت ها (lifecycle) را به عهده می گیرد. اگر مستقیماً از JavaSE به محیط های اینچنین وارد شوید این مسائل کمی گیج کننده خواهند بود ولی اگر سابقه کار با مفاهیم Java EE یا فریم ورک هایی مانند Spring را داشته باشید این موضوع برای شما قابل درک خواهد بود.
در محیط های اینچنینی وظیفه مدیریت آبجکت ها بر عهده برنامه نویس نیست ، بلکه برنامه نویس تنها تنظیمات مورد نیاز را مشخص می کند و آن ها را به Container می دهد ما بقی به عهده فریم ورک خواهد بود.
Spring Container از Dependency Injection برای مدیریت کامپوننت ها برای ساخت application استفاده می کند و آبجکت های ایجاد شده در این محیط Spring Bean نامیده می شوند که بعداً در مورد آنها توضیح خواهم داد.
اساس کار Container چندان پیچیده نیست ، در این آموزش شمای کلی عملکرد Container را مورد بررسی قرار می دهیم و در آموزش های آینده به جزئیات بیشتر می پردازیم.
Container تنظیمات مورد نیاز برای پیکره بندی را از طریق configuration metadata دریافت می کند ، metadata می تواند به شکل xml یا annotation (که اخیراً استفاده از annotation بیشتر مورد توجه قرار گرفته است ) یا حتی کد های جاوا باشد.
شکل زیر نحوه عملکرد Container را به صورت کلی نمایش می دهد :
Container کلاس هایی را به شکل POJO و تنظیمات metadata را دریافت می کند ، سپس آبجکت ها را ایجاد و ارتباط بین آن ها را استنتاج می کند و برنامه کامل را ایجاد می کند و مدیریت آبجکت ها را به عهده می گیرد.
دو نوع Container در Spring در اختیار ما قرار دارد :
- Spring BeanFactory Container
- Spring ApplicationContext Container
Spring BeanFactory Container :
ساده ترین نوع Container است که Spring در اختیار ما قرار می دهد و از مفاهیم ساده DI پشتیبانی می کند و از طریق org.springframework.beans.factory.BeanFactory قابل تعریف است.
Spring ApplicationContext Container :
این Container از طریق org.springframework.context.ApplicationContext قابل تعریف است و امکانات بیشتری را نسبت به BeanFactory در اختیار ما قرار می دهد و در شرایط کلی توصیه می شود از آن به جای BeanFactory استفاده کنیم ، با این وجود در بعضی شرایط که قصد تولید برنامه های سبک تری را داریم (مثلاً برنامه های موبایل یا Applet) می توانیم از BeanFactory استفاده کنیم.
نکته : همانطور که قبلاً گفتم و باز هم تاکید می کنم Spring یک فریم ورک برای نوشتن انواع مختلف برنامه های جاوایی است و نباید آن را با Spring MVC که برای تولید برنامه های تحت وب به کار می رود اشتباه گرفت ، Spring MVC تنها یک بخش از Spring است.