آشنایی با Beans Auto-Wiring و کاربرد آن
در درس های قبلی ، با نحوه تعریف اشیای beans به وسیله المنت و همچنین تزریق به درون فایل های XML پیکربندی اطلاعات برنامه ( Configuration File ) به وسیله تگ های و آشنا شوید .
Spring Container می تواند ارتباطات بین اشیای Beans یک برنامه را با استفاده از عمل اتصال خودکار (antowire) و بدون کمک از المنت های و انجام دهد .
عمل Autowire باعث کاهش حجم کدنویسی فایل XML پیکربندی اطلاعات ، مخصوصا در برنامه های بزرگ مبتنی بر Spring می شود .
حالت های مختلف Autowiring در Spring
در جدول زیر به معرفی روش های مختلف انجام عمل autowiring پرداخته ایم . این روش ها به Spring Container کمک می کنند بیواند از عمل autowiring در dependency injection استفاده کند . شما می توانید از خاصیت antowire المنت برای تعیین روش
autowiring آن در تعریف شی bean استفاده کنید .
- no : این مد ، حالت پیش فرض بوده و به معنای این است که از عمل autowiring استفاده نمی شود . در این حالت بایستی از refrence صیرح شی bean برای عمل اتصال ( wiring ) استفاده کنید . برای این روش نیاز نیست کار خاصی انجام داده و همانند آنچه است که در
بخش های قبلی آموزش DI نشان دادیم .
- by Name : در این حالت عمل autowiring بر مبنای خاصیت name صورت میگیرد . Spring Container به خواص اشیای bean ی که خاصیت autowire آنها برروی مقدار name تنظیم شده اند ، نگاه می کند . سپس تلاش می کند تا اشیای bean با نام مشترک
در خاصیت autowire را پیدا کرده و خواص آنها را به هم مرتبط سازد .
- by Type : در این حالت عمل autowiring بر مبنای خاصیت datatype صورت می گیرد . Spring Container به خواص اشیای bean ی که خاصیت autowire آنها برروی byType تنظیم شده اند ، در فایل XML Configuration نگاه می کند
.
- سپس تلاش می کند تا یک المنت property را که مقدار خاصیت type آن دقیقا با مقدار خاصیت نام یک bean ( خاصیت name ) در فایل XML Configuration برابر است را پیدا نموده و ۀنها را به هم متصل ( wire ) کند .
- اگر بیش از یک نمونه از مورد فوق وجود داشته باشد ، در برنامه خطای جدی ( fatal ) رخ می دهد .
- Constructor : این حالت نیز بسیار شبیه حالت by Type است با این تفاوت که بر مبنای آرگومان های تابع سازنده ( Constructor arguments ) رخ می دهد .
اگر دقیقا یک نمونه از Constructor argument در فایل XML وجود نداشته باشد ، خطای جدی (fatal) رخ می دهد .
- autodetect : در این حالت به جستجوی خودکار نامیده می شود ، Spring ابتدا تلاش می کند عمل autowiring را برمبنای Constructor انجام دهد . اگر ؟؟؟ قبلی امکان پذیر نباشد ، حالت by Type را امتحان خواهد کرد .
شما می توانید از ودهای byType و Constructor برای اتصال آرایه و سایر داده های مجموعه ای استفاده کنید .
محدودیت های کار با autowiring
اگر در تمام سطح یک پروژه از autowiring استفاده کنید ، این روش به بهترین وجه جواب خواهد داد . اما اگر در کل یک پروژه از autowiring استفاده نشود ، ممکن است باعث سردرگمی برنامه نویسان شده و آنها حفظ تعداد ودی از bean definitions را با این روش انجام دهد .
بنابراین ، autowiring به صورت قابل توجهی نیاز به تعیین properties و Constructor arguments را در برنامه کاهش می دهد . اما بایستی به محدودیت ها و اشکالات عمده autowiring ، قبل از استفاده آنها توجه کنید . به برخی از این محدودیت ها در جدول زیر اشاره کرده ایم
:
امکان نادیده گرفته شدن ( overriding possibility )
در هنگام استفاده از autowiring ، شما همچنین می توانید dependency ها را با استفاده از المنت های و نیز انجام دهید . در صورت استفاده از المنت های ذکر شده ، برنامه autowiring را نادیده خواهد گرفت .
- استفاده جهت انواع داده ای پایه ( Primitive data types ) :شما نمی توانید از قابلیت autowiring برای نوع های داده ای پایه مثل int ، string ، class و ... استفاده کنید .
- طبیعت پیج کننده : عملیات autowiring نسبت به wiring صریح کمتر دقیق است . بنابراین در صورت امکان از wiring صریح استفاده کنید .