📚دوره آموزشی Spring Batch
با شروع دوره Spring Batch چه ارزشی به دانشجویان شرکت کننده اضافه می شود؟
✳️یادگیری پردازش دادههای دستهای (Batch Processing) که پایه بسیاری از سیستمهای بانکی، بیمه، بیمه سلامت و تجارت الکترونیک است.
✳️درک معماری و مفاهیم Enterprise Batch مثل Job, Step, Chunk Processing، Retry/Skip، Transaction Management.
✳️توانایی طراحی Pipelineهای پردازشی قابل اطمینان و مقیاسپذیر.
✳️مهارت در مدیریت خطا، Restartability و fault tolerance برای سیستمهای تولید واقعی.
✳️تجربه عملی با Spring Batch و Spring Boot و آشنایی با JobRepository، Listeners و Monitoring.
✳️آمادهسازی برای بازار کار Enterprise Java و سیستمهایی که حجم داده زیاد دارند.
⚠️در حال حاضر پذیریش دانشجو نداریم و ثبت نام این دوره بسته است ولی می توانید سرفصل ها و جزییات دوره را در لینک زیر مشاهده کنید:
https://academyjavapro.com/product/spring-batch/
با شروع دوره Spring Batch چه ارزشی به دانشجویان شرکت کننده اضافه می شود؟
✳️یادگیری پردازش دادههای دستهای (Batch Processing) که پایه بسیاری از سیستمهای بانکی، بیمه، بیمه سلامت و تجارت الکترونیک است.
✳️درک معماری و مفاهیم Enterprise Batch مثل Job, Step, Chunk Processing، Retry/Skip، Transaction Management.
✳️توانایی طراحی Pipelineهای پردازشی قابل اطمینان و مقیاسپذیر.
✳️مهارت در مدیریت خطا، Restartability و fault tolerance برای سیستمهای تولید واقعی.
✳️تجربه عملی با Spring Batch و Spring Boot و آشنایی با JobRepository، Listeners و Monitoring.
✳️آمادهسازی برای بازار کار Enterprise Java و سیستمهایی که حجم داده زیاد دارند.
⚠️در حال حاضر پذیریش دانشجو نداریم و ثبت نام این دوره بسته است ولی می توانید سرفصل ها و جزییات دوره را در لینک زیر مشاهده کنید:
https://academyjavapro.com/product/spring-batch/
❤2😍1
جاواپرو | برنامه نویسی جاوا | Java
ساختار پروژه در Spring Boot و اجرای اولین برنامه سلام دوستان عزیز در ادامهی مسیر آموزشی Spring Boot، در این پیام با ساختار استاندارد پروژه آشنا میشویم و اولین برنامهی قابل اجرا را ایجاد میکنیم. درک ساختار پروژه از مهمترین قدمها برای نوشتن یک سیستم تمیز…
📌 معرفی معماری لایهای در Spring Boot (Controller, Service, Repository)
سلام دوستان عزیز
در این پیام قصد داریم معماری استاندارد پروژههای Spring Boot را بررسی کنیم. این معماری به ما کمک میکند برنامههایی قابل نگهداری، منظم و قابل توسعه ایجاد کنیم. پروژههای حرفهای در صنعت تقریباً همگی از همین الگو استفاده میکنند.
۱) مفهوم معماری لایهای
«معماری» در پروژههای اسپرینگ معمولاً به صورت لایهای طراحی میشود. هر لایه وظیفهی مشخصی دارد و با لایههای دیگر در حد نیاز ارتباط برقرار میکند. این معماری باعث میشود کدها جدا از هم، قابل تست و قابل توسعه باشند. سه لایهی اصلی عبارتاند از:
* لایهی Controller
* لایهی Service
* لایهی Repository
در ادامه هر لایه را با مثال توضیح میدهیم.
۲) لایهٔ Controller
«کنترلر» مسئول دریافت درخواست از سمت کاربر (Client) و برگرداندن پاسخ مناسب است. کنترلر هیچ منطق تجاری پیچیدهای را اجرا نمیکند؛ بلکه فقط درخواست را دریافت کرده، آن را به لایهٔ Service میسپارد و پاسخ نهایی را بازمیگرداند.
مثال از یک کنترلر ساده:
در این مثال کنترلر فقط درخواست را دریافت کرده و کار اصلی را به سرویس میسپارد.
۳) لایهٔ Service
«سرویس» قلب منطق برنامه است. تمام قوانین، پردازشها، محاسبات و تعامل با Repository در این بخش انجام میشود. این لایه نباید مستقیماً با وب مواجه شود؛ یعنی نباید @GetMapping یا @PostMapping داخل سرویس باشد.
مثال از یک سرویس:
در این لایه تصمیم گرفته میشود که اگر کاربر وجود نداشت چه اتفاقی بیفتد یا چه پردازشی انجام شود.
۴) لایهٔ Repository
«مخزن» یا Repository وظیفهی ارتباط با دیتابیس را برعهده دارد. در Spring Data JPA نیازی نیست برای هر عملیات CRUD کد بنویسیم؛ بلکه با ارثبری از JpaRepository همهی امکانات پایه را دریافت میکنیم.
مثال Repository:
این Repository بدون نوشتن حتی یک خط کد اضافه، عملیاتهایی مانند ذخیره، حذف و جستجو را فراهم میکند.
۵) ارتباط بین لایهها
«ارتباط» بین لایهها باید فقط در یک جهت باشد:
این ساختار باعث میشود منطق برنامه منسجم، قابل گسترش و قابل تست باشد. کنترلر فقط درخواست را دریافت میکند، سرویس منطق را اجرا میکند و Repository دیتا را از دیتابیس میگیرد.
۶) جمعبندی پیام
«نتیجه» این است که با معماری لایهای استاندارد در Spring Boot آشنا شدیم و دیدیم چگونه هر لایه نقش مشخصی دارد. در پیام بعدی وارد بخش جذاب بعدی میشویم؛ یعنی نحوهٔ مدیریت Beanها و نقش Annotationهایی مثل @Component و @Service و @Repository.
سلام دوستان عزیز
در این پیام قصد داریم معماری استاندارد پروژههای Spring Boot را بررسی کنیم. این معماری به ما کمک میکند برنامههایی قابل نگهداری، منظم و قابل توسعه ایجاد کنیم. پروژههای حرفهای در صنعت تقریباً همگی از همین الگو استفاده میکنند.
۱) مفهوم معماری لایهای
«معماری» در پروژههای اسپرینگ معمولاً به صورت لایهای طراحی میشود. هر لایه وظیفهی مشخصی دارد و با لایههای دیگر در حد نیاز ارتباط برقرار میکند. این معماری باعث میشود کدها جدا از هم، قابل تست و قابل توسعه باشند. سه لایهی اصلی عبارتاند از:
* لایهی Controller
* لایهی Service
* لایهی Repository
در ادامه هر لایه را با مثال توضیح میدهیم.
۲) لایهٔ Controller
«کنترلر» مسئول دریافت درخواست از سمت کاربر (Client) و برگرداندن پاسخ مناسب است. کنترلر هیچ منطق تجاری پیچیدهای را اجرا نمیکند؛ بلکه فقط درخواست را دریافت کرده، آن را به لایهٔ Service میسپارد و پاسخ نهایی را بازمیگرداند.
مثال از یک کنترلر ساده:
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
}
در این مثال کنترلر فقط درخواست را دریافت کرده و کار اصلی را به سرویس میسپارد.
۳) لایهٔ Service
«سرویس» قلب منطق برنامه است. تمام قوانین، پردازشها، محاسبات و تعامل با Repository در این بخش انجام میشود. این لایه نباید مستقیماً با وب مواجه شود؛ یعنی نباید @GetMapping یا @PostMapping داخل سرویس باشد.
مثال از یک سرویس:
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("User not found"));
}
}
در این لایه تصمیم گرفته میشود که اگر کاربر وجود نداشت چه اتفاقی بیفتد یا چه پردازشی انجام شود.
۴) لایهٔ Repository
«مخزن» یا Repository وظیفهی ارتباط با دیتابیس را برعهده دارد. در Spring Data JPA نیازی نیست برای هر عملیات CRUD کد بنویسیم؛ بلکه با ارثبری از JpaRepository همهی امکانات پایه را دریافت میکنیم.
مثال Repository:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
این Repository بدون نوشتن حتی یک خط کد اضافه، عملیاتهایی مانند ذخیره، حذف و جستجو را فراهم میکند.
۵) ارتباط بین لایهها
«ارتباط» بین لایهها باید فقط در یک جهت باشد:
Controller → Service → Repositoryاین ساختار باعث میشود منطق برنامه منسجم، قابل گسترش و قابل تست باشد. کنترلر فقط درخواست را دریافت میکند، سرویس منطق را اجرا میکند و Repository دیتا را از دیتابیس میگیرد.
۶) جمعبندی پیام
«نتیجه» این است که با معماری لایهای استاندارد در Spring Boot آشنا شدیم و دیدیم چگونه هر لایه نقش مشخصی دارد. در پیام بعدی وارد بخش جذاب بعدی میشویم؛ یعنی نحوهٔ مدیریت Beanها و نقش Annotationهایی مثل @Component و @Service و @Repository.
#Spring
🆔 @javapro_ir
🆔 @group_javapro
👍6❤2
📣اطلاعیه
... به دلیل بروزرسانی فنی، سایت جاواپرو این هفته ممکن است با اختلال همراه شود.
از صبر و شکیبایی شما سپاسگزاریم.
javapro.ir
academyjavapro.com
... به دلیل بروزرسانی فنی، سایت جاواپرو این هفته ممکن است با اختلال همراه شود.
از صبر و شکیبایی شما سپاسگزاریم.
javapro.ir
academyjavapro.com
❤1
جاواپرو | برنامه نویسی جاوا | Java
📌 معرفی معماری لایهای در Spring Boot (Controller, Service, Repository) سلام دوستان عزیز در این پیام قصد داریم معماری استاندارد پروژههای Spring Boot را بررسی کنیم. این معماری به ما کمک میکند برنامههایی قابل نگهداری، منظم و قابل توسعه ایجاد کنیم. پروژههای…
📌 مدیریت Beanها و آشنایی با Component Scan در Spring Boot
سلام دوستان عزیز
در این پیام با یکی از مهمترین مفاهیم اساسی Spring Boot آشنا میشویم؛ یعنی Beanها و نحوهی مدیریت آنها توسط فریمورک اسپرینگ. درک این بخش برای فهم عمیق IoC و Dependency Injection کاملاً ضروری است.
۱) مفهوم Bean در Spring
«بین» در اسپرینگ به هر شیئی گفته میشود که توسط Spring Container ساخته، مدیریت و نگهداری میشود. به بیان ساده، هر کلاسی که اسپرینگ مسئول ساخت آن باشد، یک Bean محسوب میشود.
این مدیریت شامل ساخت شیء، تزریق وابستگیها، تعیین طول عمر و نابودی آن است.
به طور مثال، کلاسی که با Annotation خاصی علامتگذاری شود، به صورت خودکار به یک Bean تبدیل میشود.
۲) نقش Spring Container
«کانتینر» اسپرینگ محیطی است که تمام Beanها را در خود نگهداری میکند. این کانتینر هنگام اجرای برنامه فعال میشود و بر اساس تنظیمات و Annotationها، اشیاء موردنیاز را میسازد و به هم متصل میکند.
زمانی که در کنترلر یا سرویس از یک کلاس دیگر استفاده میکنیم، در واقع از Container درخواست میکنیم که آن Bean را در اختیار ما قرار دهد.
۳) Annotationهای معرفی Bean
«نشانهگذاری» در اسپرینگ معمولاً از طریق Annotationها انجام میشود. مهمترین Annotationها برای معرفی Bean عبارتاند از:
علاوه بر @Component، سه Annotation تخصصیتر نیز وجود دارد:
* @Controller برای لایه کنترلر
* @Service برای منطق برنامه
* @Repository برای دسترسی به دیتابیس
از نظر عملکرد همگی Bean هستند، اما از نظر مفهومی نقش متفاوتی دارند.
۴) مفهوم Component Scan
«اسکن» کامپوننت فرآیندی است که طی آن Spring Boot به صورت خودکار کلاسهای علامتگذاریشده را پیدا میکند و آنها را به عنوان Bean ثبت میکند.
این اسکن به صورت پیشفرض از پکیجی که کلاس اصلی برنامه در آن قرار دارد آغاز میشود و تمام زیرپکیجها را بررسی میکند.
به همین دلیل توصیه میشود همهی پکیجها زیر پکیج اصلی پروژه قرار گیرند.
۵) تزریق وابستگی با Constructor Injection
«تزریق» وابستگی در اسپرینگ معمولاً از طریق سازنده انجام میشود که بهترین و امنترین روش است. مثال زیر نحوهی تزریق یک Bean به Bean دیگر را نشان میدهد:
در این مثال، Spring خودش Bean مربوط به EmailSender را ساخته و به NotificationService تزریق میکند.
۶) چرایی اهمیت Bean Management
«اهمیت» مدیریت Beanها در این است که برنامه بدون وابستگی شدید بین کلاسها نوشته میشود. این موضوع باعث افزایش خوانایی، تستپذیری و توسعهپذیری پروژه میشود و یکی از دلایل اصلی قدرت Spring محسوب میگردد.
۷) جمعبندی پیام
«نتیجه» این است که Beanها اجزای اصلی برنامههای Spring Boot هستند و Spring Container با استفاده از Component Scan آنها را شناسایی و مدیریت میکند. در پیام بعدی وارد مبحث بسیار مهم Scope Beanها (Singleton و Prototype) و طول عمر اشیاء در اسپرینگ میشویم.
سلام دوستان عزیز
در این پیام با یکی از مهمترین مفاهیم اساسی Spring Boot آشنا میشویم؛ یعنی Beanها و نحوهی مدیریت آنها توسط فریمورک اسپرینگ. درک این بخش برای فهم عمیق IoC و Dependency Injection کاملاً ضروری است.
۱) مفهوم Bean در Spring
«بین» در اسپرینگ به هر شیئی گفته میشود که توسط Spring Container ساخته، مدیریت و نگهداری میشود. به بیان ساده، هر کلاسی که اسپرینگ مسئول ساخت آن باشد، یک Bean محسوب میشود.
این مدیریت شامل ساخت شیء، تزریق وابستگیها، تعیین طول عمر و نابودی آن است.
به طور مثال، کلاسی که با Annotation خاصی علامتگذاری شود، به صورت خودکار به یک Bean تبدیل میشود.
۲) نقش Spring Container
«کانتینر» اسپرینگ محیطی است که تمام Beanها را در خود نگهداری میکند. این کانتینر هنگام اجرای برنامه فعال میشود و بر اساس تنظیمات و Annotationها، اشیاء موردنیاز را میسازد و به هم متصل میکند.
زمانی که در کنترلر یا سرویس از یک کلاس دیگر استفاده میکنیم، در واقع از Container درخواست میکنیم که آن Bean را در اختیار ما قرار دهد.
۳) Annotationهای معرفی Bean
«نشانهگذاری» در اسپرینگ معمولاً از طریق Annotationها انجام میشود. مهمترین Annotationها برای معرفی Bean عبارتاند از:
@Component
public class EmailSender {
public void send() {
System.out.println("Sending email...");
}
}
علاوه بر @Component، سه Annotation تخصصیتر نیز وجود دارد:
* @Controller برای لایه کنترلر
* @Service برای منطق برنامه
* @Repository برای دسترسی به دیتابیس
از نظر عملکرد همگی Bean هستند، اما از نظر مفهومی نقش متفاوتی دارند.
۴) مفهوم Component Scan
«اسکن» کامپوننت فرآیندی است که طی آن Spring Boot به صورت خودکار کلاسهای علامتگذاریشده را پیدا میکند و آنها را به عنوان Bean ثبت میکند.
این اسکن به صورت پیشفرض از پکیجی که کلاس اصلی برنامه در آن قرار دارد آغاز میشود و تمام زیرپکیجها را بررسی میکند.
به همین دلیل توصیه میشود همهی پکیجها زیر پکیج اصلی پروژه قرار گیرند.
۵) تزریق وابستگی با Constructor Injection
«تزریق» وابستگی در اسپرینگ معمولاً از طریق سازنده انجام میشود که بهترین و امنترین روش است. مثال زیر نحوهی تزریق یک Bean به Bean دیگر را نشان میدهد:
@Service
public class NotificationService {
private final EmailSender emailSender;
public NotificationService(EmailSender emailSender) {
this.emailSender = emailSender;
}
public void notifyUser() {
emailSender.send();
}
}
در این مثال، Spring خودش Bean مربوط به EmailSender را ساخته و به NotificationService تزریق میکند.
۶) چرایی اهمیت Bean Management
«اهمیت» مدیریت Beanها در این است که برنامه بدون وابستگی شدید بین کلاسها نوشته میشود. این موضوع باعث افزایش خوانایی، تستپذیری و توسعهپذیری پروژه میشود و یکی از دلایل اصلی قدرت Spring محسوب میگردد.
۷) جمعبندی پیام
«نتیجه» این است که Beanها اجزای اصلی برنامههای Spring Boot هستند و Spring Container با استفاده از Component Scan آنها را شناسایی و مدیریت میکند. در پیام بعدی وارد مبحث بسیار مهم Scope Beanها (Singleton و Prototype) و طول عمر اشیاء در اسپرینگ میشویم.
#Spring
🆔 @javapro_ir
🆔 @group_javapro
👍4
تحلیل سلسله مراتبی فیلترها در Spring Cloud Gateway
در این مقاله با معماری فیلترها در Spring Cloud Gateway آشنا میشوید و نقش WebFilter، GlobalFilter و GatewayFilter در زنجیره پردازش درخواستها را بررسی میکنیم.
مشاهده مقاله
در این مقاله با معماری فیلترها در Spring Cloud Gateway آشنا میشوید و نقش WebFilter، GlobalFilter و GatewayFilter در زنجیره پردازش درخواستها را بررسی میکنیم.
مشاهده مقاله
🆔 @javapro_ir
🆔 @group_javapro
📌 موضوع Scope Beanها و تفاوت Singleton و Prototype در Spring
سلام دوستان عزیز
در ادامهی آشنایی با Beanها، در این پیام به بررسی Scope یا محدودهی عمر Beanها در Spring میپردازیم. درک این مفهوم به ما کمک میکند بفهمیم هر شیء چه زمانی ساخته میشود و چند بار مورد استفاده قرار میگیرد.
۱) مفهوم Scope در Spring
«اسکوپ» مشخص میکند که از یک Bean چند نمونه ساخته شود و طول عمر آن چگونه باشد. به طور پیشفرض، Spring برای هر Bean فقط یک نمونه میسازد؛ اما این رفتار قابل تغییر است. انتخاب Scope مناسب تأثیر مستقیم بر عملکرد و منطق برنامه دارد.
۲) Singleton Scope (پیشفرض)
«سینگلتون» رایجترین و پیشفرضترین Scope در Spring است. در این حالت، تنها یک نمونه از Bean در کل برنامه ساخته میشود و همهی بخشها از همان نمونه استفاده میکنند.
مثال:
در این مثال، اگر این سرویس در چند کنترلر تزریق شود، همگی به یک شیء مشترک اشاره میکنند.
این نوع Scope برای سرویسها و منطقهای عمومی بسیار مناسب است.
۳) Prototype Scope
«پروتوتایپ» به این معناست که هر بار که یک Bean درخواست شود، یک نمونهی جدید ساخته میشود. این Scope برای مواقعی کاربرد دارد که هر استفاده نیازمند وضعیت (State) جداگانه باشد.
مثال:
در این حالت، هر بار که ReportGenerator تزریق یا دریافت شود، یک شیء جدید ایجاد میشود.
۴) مقایسه عملی Singleton و Prototype
«مقایسه» این دو Scope را میتوان با یک مثال ساده درک کرد.
اگر یک سرویس پردازش کاربران داشته باشیم، استفاده از Singleton منطقی است؛ زیرا منطق مشترک است.
اما اگر کلاسی برای ساخت گزارش لحظهای داشته باشیم که اطلاعات خاص هر درخواست را نگه میدارد، Prototype گزینهی بهتری است.
۵) رفتار Spring Container با Scopeها
«رفتار» Spring Container در مورد Singleton این است که Bean در زمان بالا آمدن برنامه ساخته میشود.
اما در Prototype، Bean فقط زمانی ساخته میشود که واقعاً درخواست شود و Spring مسئول نابودی آن نخواهد بود.
این تفاوت مهمی است که در طراحی سیستمهای بزرگ باید به آن توجه شود.
۶) چرا بیشتر Beanها Singleton هستند؟
«دلیل» اصلی استفاده گسترده از Singleton این است که Spring به صورت Stateless طراحی شده است. سرویسها معمولاً وضعیت داخلی ندارند و میتوانند به صورت مشترک استفاده شوند. این موضوع باعث مصرف کمتر حافظه و عملکرد بهتر برنامه میشود.
۷) جمعبندی پیام
«نتیجه» این است که Scope مشخص میکند از هر Bean چند نمونه ساخته شود. Singleton برای اغلب سرویسها انتخاب مناسبی است و Prototype فقط در شرایط خاص استفاده میشود. در پیام بعدی وارد مبحث بسیار مهم تزریق وابستگی (Dependency Injection) و انواع آن در Spring خواهیم شد.
سلام دوستان عزیز
در ادامهی آشنایی با Beanها، در این پیام به بررسی Scope یا محدودهی عمر Beanها در Spring میپردازیم. درک این مفهوم به ما کمک میکند بفهمیم هر شیء چه زمانی ساخته میشود و چند بار مورد استفاده قرار میگیرد.
۱) مفهوم Scope در Spring
«اسکوپ» مشخص میکند که از یک Bean چند نمونه ساخته شود و طول عمر آن چگونه باشد. به طور پیشفرض، Spring برای هر Bean فقط یک نمونه میسازد؛ اما این رفتار قابل تغییر است. انتخاب Scope مناسب تأثیر مستقیم بر عملکرد و منطق برنامه دارد.
۲) Singleton Scope (پیشفرض)
«سینگلتون» رایجترین و پیشفرضترین Scope در Spring است. در این حالت، تنها یک نمونه از Bean در کل برنامه ساخته میشود و همهی بخشها از همان نمونه استفاده میکنند.
مثال:
@Service
public class UserService {
}
در این مثال، اگر این سرویس در چند کنترلر تزریق شود، همگی به یک شیء مشترک اشاره میکنند.
این نوع Scope برای سرویسها و منطقهای عمومی بسیار مناسب است.
۳) Prototype Scope
«پروتوتایپ» به این معناست که هر بار که یک Bean درخواست شود، یک نمونهی جدید ساخته میشود. این Scope برای مواقعی کاربرد دارد که هر استفاده نیازمند وضعیت (State) جداگانه باشد.
مثال:
@Component
@Scope("prototype")
public class ReportGenerator {
}
در این حالت، هر بار که ReportGenerator تزریق یا دریافت شود، یک شیء جدید ایجاد میشود.
۴) مقایسه عملی Singleton و Prototype
«مقایسه» این دو Scope را میتوان با یک مثال ساده درک کرد.
اگر یک سرویس پردازش کاربران داشته باشیم، استفاده از Singleton منطقی است؛ زیرا منطق مشترک است.
اما اگر کلاسی برای ساخت گزارش لحظهای داشته باشیم که اطلاعات خاص هر درخواست را نگه میدارد، Prototype گزینهی بهتری است.
۵) رفتار Spring Container با Scopeها
«رفتار» Spring Container در مورد Singleton این است که Bean در زمان بالا آمدن برنامه ساخته میشود.
اما در Prototype، Bean فقط زمانی ساخته میشود که واقعاً درخواست شود و Spring مسئول نابودی آن نخواهد بود.
این تفاوت مهمی است که در طراحی سیستمهای بزرگ باید به آن توجه شود.
۶) چرا بیشتر Beanها Singleton هستند؟
«دلیل» اصلی استفاده گسترده از Singleton این است که Spring به صورت Stateless طراحی شده است. سرویسها معمولاً وضعیت داخلی ندارند و میتوانند به صورت مشترک استفاده شوند. این موضوع باعث مصرف کمتر حافظه و عملکرد بهتر برنامه میشود.
۷) جمعبندی پیام
«نتیجه» این است که Scope مشخص میکند از هر Bean چند نمونه ساخته شود. Singleton برای اغلب سرویسها انتخاب مناسبی است و Prototype فقط در شرایط خاص استفاده میشود. در پیام بعدی وارد مبحث بسیار مهم تزریق وابستگی (Dependency Injection) و انواع آن در Spring خواهیم شد.
#Spring
🆔 @javapro_ir
🆔 @group_javapro
👍5