معماری
ضعیفبد نیستمتوسطخوبعالی (4 votes, average: 5٫00 out of 5)
Loading...

تزریق وابستگی در اسپرینگ (Dependency Injection)

به نام خدای مهربان، در ادامه مطالب مربوط به فریمورک اسپرینگ، در این مقاله با مبحث تزریق وابستگی آشنا خواهیم شد.

تزریق وابستگی (DI)، یک الگوی طراحی است که وابستگی ها را از کد برنامه حذف می کند. این کار باعث می شود مدیریت و تست برنامه راحت تر شود. تزریق وابستگی، کد برنامه را اصطلاحا اتصال ضعیف (loosely coupled) می کند.

تزریق وابستگی در فریمورک اسپرینگ

برای اینکه DI را بهتر درک کنیم، ابتدا بهتر است در مورد Dependency Lookup (DL) بدانیم:

DLروشی است که در آن منابع در صورت تقاضا دریافت می شوند. راه های مختلفی برای دریافت یک منبع وجود دارد مثلا:

A obj = new AImpl();

در این روش دستیابی به منبع، که در اینجا یک نمونه از کلاس A است، مستقیما با استفاده از کلمه کلیدی new صورت گرفته است. روش دیگر factory method است. factory به object ای گفته می شود که برای ایجاد سایر object ها مورد استفاده قرار می گیرد. این روش بصورت زیر است:

A obj = A.getA();

در این رویکرد، برای دستیابی به منبع مورد نظر خود (یعنی یک نمونه از کلاس A) از فراخوانی factory method استاتیک getA استفاده کردیم.

روش دیگر به اینصورت است که با استفاده از JNDI (Java Naming Directory Interface) منبع مورد نیاز را بدست آوریم:

Context ctx = new InitialContext();  
Context environmentCtx = (Context) ctx.lookup("java:comp/env");  
A obj = (A)environmentCtx.lookup("A");

بنابراین می بینید که روش های دستیابی به منابع بسیار متنوع است. حال بیایید مشکل موجود در این رویکرد را ببینیم.

مشکلات Dependency Lookup:

در کل دو مشکل اصلی در DL وجود دارد:

اتصال قوی (tight coupling): DL موجب می شود کد برنامه ما اتصال کامل باشد. بنابراین اگر منابع عوض شود نیاز به تغییرات بسیاری در کد برنامه خواهیم داشت.
تست نه چندان ساده: این روش در زمان تست برنامه کاربردی مشکلات بسیاری ایجاد می کند، بخصوص در تست black box.

تزریق وابستگی

تزریق وابستگی یک الگوری طراحی است که منجر می شود وابستگی ها از کد برنامه حذف شود. در این روش اطلاعات لازم را از طریق یک منبع خارجی مانند فایل XML در اختیار برنامه قرار می دهیم. به همین دلیل کد برنامه حالت اتصال ضعیف پیدا کرده و تست آن ساده تر می شود. در این روش کد را بصورت زیر می نویسیم:

class Employee{  
Address address;    
Employee(Address address){  
this.address=address;  
}  
public void setAddress(Address address){  
this.address=address;  
}  
}

در مورد کد بالا، نمونه ای از کلاس Address توسط منبع خارجی مانند فایل XML و همینطور با استفاده از سازنده یا متود setter فراهم شده است.

روش های DI در فریمورک اسپرینگ

برای داشتن تزریق وابستگی در فریمورک اسپرینگ، دو روش وجود دارد:

  • با استفاده از سازنده
  • با استفاده از متود setter

در مقاله های آتی در مورد این دو روش بیشتر صحبت خواهیم کرد.

همچنین ببینید

تزریق سازنده در مقابل تزریق setter

مقایسه دو روش SI و CI در فریمورک اسپرینگ

به نام خدای مهربان همانطور که در مقاله های قبلی اشاره شد، فریمورک اسپرینگ از …

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *