0 امتیاز
قبل در برنامه نویسی توسط (97 امتیاز)
ویرایش شده قبل توسط
ایا استفاده از @autowired در یک سرولت کار درستی است ؟

1 پاسخ

+1 امتیاز
قبل توسط (693 امتیاز)
ویرایش شده قبل توسط

در مجموع فیلد autowiring بهترین نوع injection نیست چرا که نوشتن تست را سخت می کند و شما را به سمت کدهای unsafe هدایت می کند به مثال زیر توجه کنید ولی کار اشتباهی هم نیست و شما می توانید اینکار را انجام دهید نمونه کد injection در سرولت با اسپرینگ رو از اینجا می تونید ببینید.

public class MyComponent{

@autowired
DependecyComponent dep;


}

حالا ممکنه یه برنامه نویسی بیاد و اینکار رو انجام بده 
MyComponent mc = new MyComponent();

در اینصورت فیلد مورد نظر null میشه و شما هر آن ممکنه nullpointerexception بگیرید گرچه این وظیفه ی اسپرینگ است که تایپ safe باشه ولی این فریم ورک اونقدر باهوش نیست که این لطف رو در حق شما بکنه فریم ورک های دیگر مثل Weld CDI تایپ safe هستند. اما چون کسی سرولت رو instansiate نمی کنه اینکار مشکلی نداره بیشتر از constructor injection استفاده کنید .

 

public class MyComponent{

@Autowired
public MyComponent(DependencyComponent dep){

}


}
قبل توسط (97 امتیاز)
با تشکر از توضیحات کالمتون  ولی منظور من این بود که وقتی یک بین در سطح سرولت @Autowired میشود آیا بین تمام request ها به اشتراک گذاشته می شود؟ یا خیر‌؟
قبل توسط (693 امتیاز)
+1
بهتر بود از اول همین رو در سوال میپرسیدید از اونجاییکه بصورت پیش فرض bean های اسپرینگ singleton هستند یک instance از bean در سرولت استفاده می شود و این چیز خوبیه بنابراین thread-safe نبودن سرولت مشکلی برای شما ایجاد نمی کنه در نتیجه بله یک bean در تمام request ها به اشتراک گذاشته می شود مگر اینکه bean را از اسکوپ singleton خارج کنید

سوالات مشابه

0 امتیاز
1 پاسخ 1.1هزار بازدید
0 امتیاز
1 پاسخ 877 بازدید
+1 امتیاز
1 پاسخ 1.7هزار بازدید
0 امتیاز
0 پاسخ 273 بازدید
0 امتیاز
0 پاسخ 313 بازدید
+1 امتیاز
1 پاسخ 669 بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط HS (12 امتیاز)
0 امتیاز
1 پاسخ 465 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط bahrambb (308 امتیاز)
0 امتیاز
1 پاسخ 7.9هزار بازدید
0 امتیاز
2 پاسخ 1.0هزار بازدید
...