قابلیت autowire در Spring چیست و چه مزیتی دارد؟

0 رأی
میانگین بازدید روزانه 0.471,029 بازدید
قابلیت autowire در Spring چیست و چه مزیتی دارد؟ آیا bean های Spring بصورت پیش فرض autowire هستند؟
سوال 5 سال قبل در تالار برنامه نویسی توسط Saeed Zarinfam (392 امتیاز)

2 جواب

+1 رأی

در Spring می توان وابستگی بین bean ها را با استفاده از autowire بصورت خودکار مدیریت کرد، بدین معنی که بدون تعریف کردن تگ property و خصوصیت ref در زمان تعریف وابستگی، وظیفه پیدا کردن bean برای inject کردن درون bean وابسته را به خود Spring می سپاریم.

autowiring در Spring پنج نوع دارد ('no', 'byName', 'byType', 'constructor', و 'autodetect') که بصورت پیش فرض قابلیت autowire در Spring غیر فعال است و مقدار خصوصیت autowire برای یک bean برابر no است و حتما باید برای آن bean با استفاده از تگ property و خصوصیت ref وابستگی تعریف شود:

 <bean id="employee" class="com.javabyab.spring.autowire.Employee">
  <property name="name" value="Jonty" />
  <property name="age" value="28" />
  <property name="address" ref="address"></property>
 </bean>

حال اگر بخواهیم از قابلیت autowiring از نوع byName استفاده کنیم تعریف بالا بصورت زیر تغییر می کند:

 <bean id="employee" class="com.javabyab.spring.autowire.Employee"
  autowire="byName">
  <property name="name" value="Jonty" />
  <property name="age" value="28" />
 </bean>

همانطور که ملاحظه می کنید بدلیل استفاده از نوع byName دیگر وابستگی به کلاس Address درون فایل xml تعریف نشده است و بدلیل اینکه کلاس Employee یک فیلد از نوع Address دارد و مقدار خصوصیت autowire نیز برابر byName است در صورت همنام بودن فیلد ازنوع Address در کلاس Employee با نام Address bean در تنظیمات Spring عملیات dependency injection بصورت خودکار اتفاق می افتد.

جواب 5 سال قبل توسط Saeed Zarinfam (392 امتیاز)
0 رأی

برای inject کردن یک bean درون یک bean دیگر دو راه وجود دارد. یکی اینکه توسط xml در فایل های معروف به applicationcontext به صورت زیر عمل شود :

<bean id="destinationBeanId" class="FULL_CLASS_NAME">

<property name="propName" ref="sourceBeanId">

</bean>

و یا اینکه از انوتیشن

@Autowired

قبل از تعریف متغیر حامل bean مربوطه و یا قبل از تعریف متد setter آن استفاده شود.

autowire در واقع همان bean injection است.

جواب 5 سال قبل توسط Masoud Salehi (1,203 امتیاز)
slm
khili khub va Mofied boud mamnounam

VG
Mehdi

سوال های مشابه

0 رأی
0 جواب میانگین بازدید روزانه 0.3873 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.52230 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.37206 بازدید
سوال 1 سال قبل در تالار برنامه نویسی توسط HA (129 امتیاز)
0 رأی
1 جواب میانگین بازدید روزانه 0.21124 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.62381 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.23142 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.29178 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.2122 بازدید
0 رأی
2 جواب میانگین بازدید روزانه 0.57382 بازدید
+1 رأی
2 جواب میانگین بازدید روزانه 0.37257 بازدید
کانال تلگرام جواب یاب
...