Media is too big
VIEW IN TELEGRAM
جزییات بیشتر و ثبت نام
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
⚠️میکروسرویسها بدون این الگوهای طراحی جاوا به یک آشوب تبدیل میشن!
داری با میکروسرویسها توی جاوا کار میکنی؟ بدون این الگوها، خطر بینظمی در کمینه.
بیا با هم بررسیشون کنیم:
⚫ ۱. الگوی Saga
✔️ مدیریت تراکنشهای توزیعشده
✔️ حفظ یکپارچگی دادهها بین سرویسها
⚫ ۲. دروازه API (API Gateway)
✔️ نقطه ورود مرکزی
✔️ مدیریت احراز هویت، محدودیت نرخ و مسیردهی
⚫ ۳. قطعکننده مدار (Circuit Breaker)
✔️ جلوگیری از خطاهای زنجیرهای
✔️ حفظ پایداری در زمان بروز مشکل
⚫ ۴. کشف سرویس (Service Discovery)
✔️ شناسایی خودکار سرویسها
✔️ سازگار با Eureka / Consul
🐿 ۵. الگوی DTO (Data Transfer Object)
✔️ APIهای تمیز و مرتب
✔️ جلوگیری از نمایش مدلهای داخلی
🟢 دوره میکروسرویس ها با جاوا
➡️ اشتراک 👍 لایک 💬 کامنت
داری با میکروسرویسها توی جاوا کار میکنی؟ بدون این الگوها، خطر بینظمی در کمینه.
بیا با هم بررسیشون کنیم:
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🙏1
نوشتن کد تمیز و قابل نگهداری در جاوا فقط دربارهی اجرای درست برنامه نیست — بلکه هدف این است که کدها خوانا، قابل استفادهی مجدد و بادوام باشند.
به اصل تک مسئولیتی پایبند باشید
ترکیب (composition) را به ارثبری ترجیح دهید
فیلدها را خصوصی (private) نگه دارید
برای ثابتها از final استفاده کنید
از نامهای واضح و معنادار استفاده کنید
از camelCase برای متغیرها و متدها استفاده کنید
از PascalCase برای نام کلاسها استفاده کنید
هر متد باید فقط یک کار انجام دهد
متدها را کوتاه و متمرکز نگه دارید (۵ تا ۲۰ خط یک معیار خوب است)
از اثرات جانبی پنهان خودداری کنید
تعداد پارامترهای متد را به ۳ محدود کنید؛ اگر بیشتر لازم شد، یک شیء تعریف کنید
کدهای مرتبط را بهصورت منطقی گروهبندی کنید
در هر فایل فقط یک کلاس عمومی (public) داشته باشید
برای ثابتها از UPPER_SNAKE_CASE استفاده کنید
importهای استفادهنشده را مرتباً حذف کنید
به جای پیادهسازیها، با واسطها (interface) برنامهنویسی کنید
به اصول SOLID پایبند باشید
از متدهای static برای منطق تجاری (business logic) پرهیز کنید
برای کاهش تو در تو شدن کد، زودتر return کنید
به جای if-elseهای طولانی از switch یا چندریختی (polymorphism) استفاده کنید
استثناها را بهصورت معنادار مدیریت کنید — فقط گرفتن و نادیده گرفتنشان کافی نیست
با احتیاط از Lombok استفاده کنید — اجازه ندهید پیچیدگی را پنهان کند
از Streams و Lambdas استفاده کنید، ولی مراقب خوانایی کد باشید
DTOها و Entityها را جدا نگه دارید تا معماری تمیز حفظ شود
کد تمیز باید خودش را توضیح دهد. هدف این است که نیت شما نه فقط برای کامپایلر، بلکه برای توسعهدهندهی بعدی (یا خود آیندهی شما) کاملاً روشن باشد.
عادت مورد علاقهی شما در کدنویسی تمیز چیست؟ بیایید با هم به اشتراک بگذاریم و یاد بگیریم.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🙏1
تا حالا شده منتظر پاسخ یک API یا اجرای یک کوئری کند از دیتابیس بمونید تا برنامهتون ادامه پیدا کنه؟
اجازه بدید یکی از ابزارهای کمتر شناختهشده ولی بسیار قدرتمند جاوا رو بهتون معرفی کنم: CompletableFuture.
CompletableFuture راهکار جاوا برای نوشتن کدهای غیربلادکننده (non-blocking) و غیربههنگام (asynchronous) است.
به جای اینکه برنامهتون منتظر بمونه، میتونید تسکها رو به صورت موازی اجرا کنید، نتایج رو زنجیرهای پردازش کنید، خطاها رو مدیریت کنید — اونم بدون اینکه thread اصلی متوقف بشه.
وقتی میخواید چند کار رو همزمان انجام بدید (مثلاً گرفتن داده از چند سرویس مختلف).
وقتی متوقف کردن thread اصلی امکانپذیر یا قابل قبول نیست (سلام به بهبود عملکرد!).
برای عملیاتهای سنگین I/O مثل درخواستهای HTTP یا دسترسی به دیتابیس.
وقتی میخواید جریانهای غیربههنگام (asynchronous workflows) بسازید که با رسیدن داده واکنش نشون بدن.
عملکرد برنامه رو بهطور چشمگیری افزایش میده (مخصوصاً در سیستمهای مبتنی بر I/O).
اپلیکیشن شما رو پاسخگو و سریع نگه میداره.
بهتون اجازه میده کد غیربههنگام بنویسید که هم تمیزه، هم قابل فهمتر.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🙏1
1. Spring Boot چیست؟
2. مزایای Spring Boot چیست؟
3. تفاوت بین Spring و Spring Boot چیست؟
4. Spring Boot Starter چیست؟
5. پیکربندی خودکار (auto-configuration) چیست؟
6. @SpringBootApplication چه کاری انجام میدهد؟
7. Spring Boot چگونه ویژگیهای (properties) برنامه را مدیریت میکند؟
8. چگونه پورت پیشفرض را در Spring Boot تغییر میدهید؟
9. Spring Initializr چیست؟
10. تفاوت بین @Component، @Service و @Repository چیست؟
11. چگونه در Spring Boot یک API مبتنی بر REST ایجاد میکنید؟
12. Spring Data JPA چیست؟
13. چگونه با استفاده از Spring Boot به پایگاه داده متصل میشوید؟
14. چگونه به صورت سراسری استثناها را در Spring Boot مدیریت میکنید؟
15. Spring Boot Actuator چیست؟
16. چگونه اندپوینتهای Actuator را فعال و سفارشیسازی میکنید؟
17. پروفایل در Spring Boot چیست؟
18. چگونه یک برنامه Spring Boot را ایمنسازی میکنید؟
19. چگونه در Spring Boot لاگگذاری (Logging) انجام میدهید؟
20. چگونه در Spring Boot وظایف زمانبندیشده (Scheduled Tasks) تعریف میکنید؟
21. DevTools در Spring Boot چیست؟
22. هدف از spring-boot-devtools چیست؟
23. هدف از spring-boot-devtools چیست؟ (تکراری)
24. چگونه در Spring Boot تست واحد (Unit Test) مینویسید؟
25. چگونه یک برنامه Spring Boot را مستقر (Deploy) میکنید؟
⚡️ @javapro_ir💬 @group_javapro
#مصاحبه #استخدام #جاوا #Spring_boot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
DJL، Tribuo، Deeplearning4j
Spring AI = یکپارچگی بینقص
عملکرد JVM + CRaC + GraalVM = آتشین و سریع
جاوا بهخوبی با ONNX، TensorFlow، PyTorch کار میکند
نیازی به لایه ترجمه نیست — فقط وصل کن و بساز
---
🏭 آماده برای تولید (Production Ready)
امنیت، عملکرد و مانیتورینگ داخلی
برنامههای AI را با همان قابلیت اطمینان معروف جاوا در مقیاس بالا اجرا کنید
⚡️ @javapro_ir💬 @group_javapro
#java #جاوا #هوش_مصنوعی #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1🙏1
هوش مصنوعی در حال تغییر نحوه ساخت سیستمهای بکاند است — و جاوا دیگر تماشاگر این تحول نیست.
نه فقط فراخوانی مدلهای هوش مصنوعی… بلکه تبدیل آنها به بخشی طبیعی از جریان کاری برنامه.
Spring AI – یکپارچهسازی OpenAI، Hugging Face و سایر مدلها با Spring Boot
LangChain4J – آوردن جریانهای کاری مبتنی بر عامل به جاوا
Kompact AI – اجرای مدلهای بزرگ هوش مصنوعی روی CPU (بله، بدون نیاز به GPU!)
OpenAI + مبدلهای سفارشی – مناسب برای تفکر مدلمحور
در حال تبدیل شدن به یک پلتفرم مجهز به هوش مصنوعی است.
⚡️ @javapro_ir💬 @group_javapro
#java #جاوا #هوش_مصنوعی #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🙏1
اما بعضیها ترجیح میدن با کلاس خصوصی جلو برن. برای این دسته هم در «جاواپرو» شرایط فراهمه.
@rzutab
Please open Telegram to view this post
VIEW IN TELEGRAM
درک اصول SOLID برای نوشتن برنامههای جاوایی که قابل توسعه، نگهداریپذیر و انعطافپذیر باشند، حیاتی است. آیا این اصول را در پروژههایت به کار میبری؟
• اصل مسئولیت یگانه (SRP): هر کلاس فقط یک وظیفه دارد.
• اصل باز/بسته (OCP): قابلیت توسعه بدون نیاز به تغییر.
• اصل جایگزینی لیسکوف (LSP): زیرکلاسها باید بدون تغییر رفتار قابل جایگزینی باشند.
• اصل تفکیک رابط (ISP): رابطهای کوچک و تخصصی بهتر از رابطهای بزرگ هستند.
• اصل وارونگی وابستگی (DIP): وابستگی به انتزاع، نه پیادهسازی.
📑 قرارداد SOLID (محبوب ۱۰۰٪ در مصاحبهها):
هر کلاس فقط باید یک دلیل برای تغییر داشته باشد.
مثال: کلاس UserService فقط باید منطق مربوط به کاربر را مدیریت کند، نه ذخیرهسازی داده.
کد باید برای توسعه باز، اما برای تغییر بسته باشد.
مثال: قابلیت افزودن ویژگی جدید با ایجاد کلاس جدید، بدون تغییر در کدهای قبلی.
زیرکلاسها باید قابل جایگزینی با کلاس پایه باشند، بدون اختلال در عملکرد.
مثال: Square نباید Rectangle را توسعه دهد، مگر اینکه دقیقاً مثل آن رفتار کند.
رابطها باید کوچک و دقیق باشند.
مثال: اجبار کلاسها به پیادهسازی متدهای غیرضروری اشتباه است.
ماژولهای سطح بالا باید به انتزاعها وابسته باشند، نه به ماژولهای سطح پایین.
مثال: استفاده از تزریق وابستگی برای جدا کردن اجزای برنامه.
عدم رعایت SOLID منجر به موارد زیر میشود:
•
•
•
اگر برنامه جاوایی پیچیدهای مینویسی، رعایت اصول SOLID ضروری است. کدت سادهتر نگهداری، تست و توسعه خواهد شد.
تا حالا کدی را برای تطبیق با اصول SOLID بازنویسی کردهای؟ کدام اصل را در کارت مؤثرتر میدانی؟ بیا گفتگو کنیم!
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
فرقی نمیکند که برای شرکتهای بزرگ مثل Google، Amazon، Microsoft آماده میشوی یا استارتاپهای مطرح را هدف گرفتهای — آشنایی با Java 8 در مصاحبهها ضروری است.
Java 8 تحول بزرگی در برنامهنویسی جاوا
ایجاد کرد و قابلیتهایی آورد که کدها را خواناتر، نگهداشتپذیرتر و تابعمحورتر کرد.
در تصویر ضمیمه شده، مهمترین ویژگیهای Java 8 آمده که هر توسعهدهندهی جاوا باید به آنها مسلط باشد.
این ویژگیها فقط تئوری نیستند — در مصاحبهها از شما میخواهند که با آنها کدنویسی کنید و در سناریوهای واقعی از آنها استفاده کنید!
نکته: تمرین عملی را جدی بگیر. سعی کن حلقههای قدیمی را با استفاده از Stream API و ساختارهای تابعمحور بازنویسی کنی.
اگر برای مصاحبهها آماده میشوی، تسلط بر Java 8 میتواند همان مزیتی باشد که تو را متمایز میکند.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
در اپلیکیشنهای پرفورمنسمحور جاوا، درک نحوه مدیریت حافظه در پشتصحنه میتواند یک تغییر اساسی ایجاد کند — نه فقط برای بهینهسازی، بلکه برای نوشتن کدی تمیز و مقیاسپذیر.
Heap Space (فضای هیپ): به دو بخش تقسیم میشود: نسل جوان (Young Generation) شامل Eden و Survivorها، و نسل قدیم (Old Generation). اشیاء کوتاهعمر ابتدا در Young Generation ایجاد میشوند و اگر از چرخههای GC جان سالم به در ببرند، به Old Generation منتقل میشوند.
Stack Memory (حافظه پشته): مدیریتکننده فراخوانیهای متد، متغیرهای محلی، و نتایج میانی است — برای هر ترد بهصورت مجزا اختصاص مییابد.
Method Area / Metaspace: شامل متادیتاهای سطح کلاس، اطلاعات متدها، و متغیرهای static است.
جمعآوری زباله (Garbage Collection) و فرآیند آن
Minor GC: حافظه نسل جوان را پاکسازی میکند — سریع و پرتکرار.
Major (Full) GC: حافظه نسل قدیم را پاکسازی میکند — پرهزینهتر، اما بسیار حیاتی.
Serial GC: ساده و تکنخی
Parallel GC: بهینهشده برای کارایی بالا (Throughput)
CMS GC: بهینهشده برای تأخیر کم
G1 GC: مبتنی بر منطقه (Region-based)، تعادلی میان زمان توقف و عملکرد
از ایجاد بیمورد اشیاء خودداری کنید
از ساختارهای دادهای با بهرهوری حافظه استفاده کنید
فعالیت GC را با ابزارهایی مثل JVisualVM و لاگهای GC مانیتور کنید
پارامترهای JVM را متناسب با GC مورد استفاده تنظیم کنید
درک این مفاهیم فقط برای رفع نشت حافظه یا تنظیم پرفورمنس نیست — بلکه کلیدیست برای تبدیل شدن به یک مهندس جاوای کارآمد و حرفهای.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
پردیس
44 ساعت در هفته
تمام وقت
سرویس رفت و برگشت -وام -پاداش -بیمه درمان تکمیلی -پارکینگ -کمک هزینه دوره آموزشی -بن خرید -ناهار -پزشک سازمانی -صبحانه -بسته ها و هدایای مناسبتی
سفرهای کاری
ما در داتین بهدنبال همکاری خلاق و باپشتکار هستیم تا در نقش برنامهنویس جاوا در تیمهای توسعه نرمافزاری ما را همراهی کند.
طراحی و پیاده سازی نیاز های زیرساختی توسعه نرم افزار
بهبود زیرساختی سامانه موجود و تلاش در جهت توسعه ویژگی های جدید
تسلط بر JavaSE
آشنایی با JavaEE
تسلط بر مفاهیم شیءگرایی
تسلط بر اصول و الگوهای طراحی و توسعه نرمافزار و Clean Code
آشنایی با ORM (ترجیحاً Hibernate)
آشنایی با مفاهیم پایگاه داده و توانایی نوشتن Query
آشنایی با معماری نرم افزار، خصوصا معماریهای لایهای و microservice
آشنایی با مفاهیم بانکی مزیت محسوب میشود.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
کد زیر را در نظر بگیرید:
class Animal {
void speak() {
System.out.println("Animal speaks");
}
}
class Dog extends Animal {
void speak() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
void speak() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal a1 = new Dog();
Animal a2 = new Cat();
Animal a3 = new Animal();
a1.speak();
a2.speak();
a3.speak();
}
}
الف)
Animal speaks
Animal speaks
Animal speaks
ب)
Dog barks
Cat meows
Animal speaks
ج)
Dog barks
Dog barks
Dog barks
د)
خطای کامپایل رخ میدهد
پاسخ صحیح: ب)
Dog barks
Cat meows
Animal speaks
در این مثال:
کلاس Animal یک متد speak() دارد.
کلاسهای Dog و Cat آن را override کردهاند.
در زمان اجرا، به خاطر پدیده Polymorphism، نسخه متدی اجرا میشود که به نوع شیء واقعی مرتبط است، نه نوع ارجاع.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🧠 آشنایی با LinkedHashMap در زبان Java
کلاس LinkedHashMap در Java برای ذخیرهسازی دادهها بهصورت کلید-مقدار (Key-Value) همراه با حفظ ترتیب درج طراحی شده است. این کلاس ترکیبی از سرعت HashMap و ترتیب LinkedList را در اختیار قرار میدهد.
🔹 کاربرد
در موقعیتهایی که نیاز به نگهداری دادهها با حفظ ترتیب وارد کردن آنها وجود دارد، استفاده از LinkedHashMap انتخاب مناسبی بهشمار میآید. برخی کاربردهای رایج:
* پیدا کردن اولین کاراکتر یا عنصر غیرتکراری در مجموعهای از دادهها
* پیادهسازی حافظه پنهان (Cache) با سیاست حذف عناصر قدیمی (LRU)
* نگهداری دادهها با ترتیب ثابت برای گزارشگیری یا نمایش خروجی
🔹 سازندهها
کلاس LinkedHashMap چند نوع سازنده دارد که شامل موارد زیر میشود:
در صورتی که مقدار accessOrder برابر true قرار داده شود، ترتیب بر اساس آخرین دسترسی به عنصر خواهد بود.
🔹 توابع کاربردی مهم
کلاس LinkedHashMap توابعی برای مدیریت دادهها فراهم میکند که شامل موارد زیر است:
*متد`put(key, value)` ← افزودن یا بروزرسانی مقدار برای کلید مشخص
*متد get(key) ← دریافت مقدار متناظر با کلید
*متد containsKey(key) ← بررسی وجود کلید
*متد containsValue(value) ← بررسی وجود مقدار
*متد remove(key) ← حذف کلید و مقدار
*متد clear() ← حذف تمامی دادهها
*متد size() ← تعداد عناصر موجود
*متد isEmpty() ← بررسی خالی بودن ساختار
*متد keySet() ← مجموعهای از کلیدها بهترتیب درج
*متد values() ← مجموعهای از مقادیر بهترتیب درج
*متد entrySet() ← مجموعهای از جفتهای کلید-مقدار
🔹 مثال ساده
در مثال زیر، نمرات تعدادی از دانشآموزان در LinkedHashMap درج شده و به ترتیب ورود چاپ میشود:
📤 خروجی برنامه:
🔹 جمعبندی
برای مواقعی که نیاز به نگهداری ترتیب درج دادهها همراه با سرعت بالای جستوجو وجود داشته باشد، LinkedHashMap یکی از بهترین انتخابها در Java است. علاوه بر این، با استفاده از ویژگی accessOrder و بازنویسی تابع removeEldestEntry امکان پیادهسازی کشهایی مانند LRU نیز فراهم میشود.
کلاس LinkedHashMap در Java برای ذخیرهسازی دادهها بهصورت کلید-مقدار (Key-Value) همراه با حفظ ترتیب درج طراحی شده است. این کلاس ترکیبی از سرعت HashMap و ترتیب LinkedList را در اختیار قرار میدهد.
🔹 کاربرد
در موقعیتهایی که نیاز به نگهداری دادهها با حفظ ترتیب وارد کردن آنها وجود دارد، استفاده از LinkedHashMap انتخاب مناسبی بهشمار میآید. برخی کاربردهای رایج:
* پیدا کردن اولین کاراکتر یا عنصر غیرتکراری در مجموعهای از دادهها
* پیادهسازی حافظه پنهان (Cache) با سیاست حذف عناصر قدیمی (LRU)
* نگهداری دادهها با ترتیب ثابت برای گزارشگیری یا نمایش خروجی
🔹 سازندهها
کلاس LinkedHashMap چند نوع سازنده دارد که شامل موارد زیر میشود:
LinkedHashMap<K, V> map = new LinkedHashMap<>();
LinkedHashMap<K, V> map = new LinkedHashMap<>(initialCapacity);
LinkedHashMap<K, V> map = new LinkedHashMap<>(initialCapacity, loadFactor);
LinkedHashMap<K, V> map = new LinkedHashMap<>(initialCapacity, loadFactor, accessOrder);
در صورتی که مقدار accessOrder برابر true قرار داده شود، ترتیب بر اساس آخرین دسترسی به عنصر خواهد بود.
🔹 توابع کاربردی مهم
کلاس LinkedHashMap توابعی برای مدیریت دادهها فراهم میکند که شامل موارد زیر است:
*متد`put(key, value)` ← افزودن یا بروزرسانی مقدار برای کلید مشخص
*متد get(key) ← دریافت مقدار متناظر با کلید
*متد containsKey(key) ← بررسی وجود کلید
*متد containsValue(value) ← بررسی وجود مقدار
*متد remove(key) ← حذف کلید و مقدار
*متد clear() ← حذف تمامی دادهها
*متد size() ← تعداد عناصر موجود
*متد isEmpty() ← بررسی خالی بودن ساختار
*متد keySet() ← مجموعهای از کلیدها بهترتیب درج
*متد values() ← مجموعهای از مقادیر بهترتیب درج
*متد entrySet() ← مجموعهای از جفتهای کلید-مقدار
🔹 مثال ساده
در مثال زیر، نمرات تعدادی از دانشآموزان در LinkedHashMap درج شده و به ترتیب ورود چاپ میشود:
import java.util.LinkedHashMap;
public class Example {
public static void main(String[] args) {
LinkedHashMap<String, Integer> scores = new LinkedHashMap<>();
scores.put("ali", 85);
scores.put("maryam", 92);
scores.put("reza", 78);
for (String name : scores.keySet()) {
System.out.println(name + " -> " + scores.get(name));
}
}
}
📤 خروجی برنامه:
ali -> 85
maryam -> 92
reza -> 78
🔹 جمعبندی
برای مواقعی که نیاز به نگهداری ترتیب درج دادهها همراه با سرعت بالای جستوجو وجود داشته باشد، LinkedHashMap یکی از بهترین انتخابها در Java است. علاوه بر این، با استفاده از ویژگی accessOrder و بازنویسی تابع removeEldestEntry امکان پیادهسازی کشهایی مانند LRU نیز فراهم میشود.
#کاربرـپیشرفته
🆔 @javapro_ir
🆔 @group_javapro
👍5
همه میخوان Spring Boot را یاد بگیرن ولی نمیدونن بعد از Java SE و قبل از شروع یادگیری Spring Boot باید بر مباحث Spring Core مسلط باشند.
جاواپرو اولین سایت آموزشی در ایران( حداقل من جایی در سایت های فارسی ندیدم) که دوره Spring Core رو تهیه کرده است.
جهت ثبت نام در دوره اینجا کلیک کنید.
جاواپرو اولین سایت آموزشی در ایران( حداقل من جایی در سایت های فارسی ندیدم) که دوره Spring Core رو تهیه کرده است.
جهت ثبت نام در دوره اینجا کلیک کنید.
آکادمی جاواپرو
دوره طلایی Spring Core
این دوره به شما کمک میکند تا با مبانی Spring Boot آشنا شوید و مهارتهای لازم برای توسعهی برنامههای کاربردی مبتنی بر این فریمورک محبوب جاوا را کسب کنید.
👍1
🤯میدونستی مباحث دوره Spring Core آکادمی جاواپرو از مباحث دوره udemy کامل تر است!
👍 اگر بر Java Core مسط شدی و میخوای اسپرینگ بوت رو شروع کنی پیشنهاد میکنم ابتدا Spring Core رو یاد بگیری...
جزییات بیشتر و ثبت نام
جزییات بیشتر و ثبت نام
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
ثبت نام
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
همه عاشق @RestController، @Service و جادوی Spring هستند.
اما قهرمان واقعی در پروژههای من؟
✨ @EventListener ✨
ما ازش استفاده کردیم تا یک سرویس شلوغ و درهم رو پاکسازی کنیم که وظایف زیر رو انجام میداد: •
•
• 📑 لاگهای حسابرسی
الان تبدیل شده به:
میخوای پردازش ناهمزمان هم داشته باشی؟ فقط کافیه @Async رو هم اضافه کنی—تمام!⚡️
نه یه قابلیت براق جدیده، نه یه موضوع داغ.
اما بیسروصدا نحوه ساخت سرویسهامون رو متحول کرد.
🆔 @javapro_ir
🆔 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
1. تعریف یک رویداد سفارشی (UserRegisteredEvent)
2. انتشار رویداد از یک سرویس
3. دریافت رویداد توسط یک Listener با @EventListener
4. اجرای Listener بهصورت ناهمزمان با @Async
// AppConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
@Configuration
@EnableAsync
public class AppConfig {
}
---
// UserRegisteredEvent.java
import org.springframework.context.ApplicationEvent;
public class UserRegisteredEvent extends ApplicationEvent {
private final String email;
public UserRegisteredEvent(Object source, String email) {
super(source);
this.email = email;
}
public String getEmail() {
return email;
}
}
---
// UserService.java
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final ApplicationEventPublisher publisher;
public UserService(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
public void registerUser(String email) {
// ثبت کاربر در دیتابیس یا عملیات دیگر (اینجا شبیهسازی میکنیم)
System.out.println("User registered: " + email);
// انتشار رویداد
publisher.publishEvent(new UserRegisteredEvent(this, email));
}
}
// NotificationListener.java
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.context.event.EventListener;
@Component
public class NotificationListener {
@Async
@EventListener
public void handleUserRegistration(UserRegisteredEvent event) {
// شبیهسازی ارسال ایمیل
try {
Thread.sleep(2000); // تأخیر برای شبیهسازی پردازش سنگین
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Sending welcome email to: " + event.getEmail());
}
⚡️ @javapro_ir💬 @group_javapro
#جاوا #برنامه_نویسی #java #spring_boot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1