برنامه نویسی جاوا | جاواپرو – Telegram
برنامه نویسی جاوا | جاواپرو
5.95K subscribers
1.15K photos
168 videos
401 files
1.32K links
🎓آکـــــــــادمی جاواپـــــــــــــــرو
آموزش پیش نیازهای برنامه نویسی
آموزش مقدماتی تا پیشرفته جاوا
آموزش Spring Boot
سفارش پروژه ، دوره و تدریس خصوصی: @rzutab
مشاهده دوره ها و ثبت نام👇
wwww.academyjavapro.com
گروه جاوا : @group_javapro
Download Telegram
برنامه نویسی جاوا | جاواپرو
ساختار پروژه در Spring Boot و اجرای اولین برنامه سلام دوستان عزیز در ادامه‌ی مسیر آموزشی Spring Boot، در این پیام با ساختار استاندارد پروژه آشنا می‌شویم و اولین برنامه‌ی قابل اجرا را ایجاد می‌کنیم. درک ساختار پروژه از مهم‌ترین قدم‌ها برای نوشتن یک سیستم تمیز…
📌 معرفی معماری لایه‌ای در Spring Boot (Controller, 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
👍63
📣اطلاعیه
... به دلیل بروزرسانی فنی، سایت جاواپرو این هفته ممکن است با اختلال همراه شود.
از صبر و شکیبایی شما سپاسگزاریم.

javapro.ir
academyjavapro.com
1
برنامه نویسی جاوا | جاواپرو
📌 معرفی معماری لایه‌ای در 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
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
👍41
تحلیل سلسله مراتبی فیلترها در Spring Cloud Gateway

در این مقاله با معماری فیلترها در 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 در کل برنامه ساخته می‌شود و همه‌ی بخش‌ها از همان نمونه استفاده می‌کنند.

مثال:

@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
👍72
سوال یکی از کاربران جاواپرو

برای مصاحبه نیاز به یادگیری هایبرنیت دارم، در بین دوره های جاواپرو دوره ای هست که ی ذره هایبرنیت رو بررسی کرده باشه؟

یکی از اهداف دوره Spring Core همین است. و بسیار زیاد هایبرنیت بررسی شده.
سرفصل های هایبرنیت آکادمی جاواپرو کامله و جایی این مباحث رو پیدا نمیکنید که تدریس شده باشه

مشاهده جزییات و ثبت نام
2
برنامه نویسی جاوا | جاواپرو
📌 موضوع Scope Beanها و تفاوت Singleton و Prototype در Spring سلام دوستان عزیز در ادامه‌ی آشنایی با Beanها، در این پیام به بررسی Scope یا محدوده‌ی عمر Beanها در Spring می‌پردازیم. درک این مفهوم به ما کمک می‌کند بفهمیم هر شیء چه زمانی ساخته می‌شود و چند بار…
📌 موضوع: Dependency Injection و روش‌های تزریق وابستگی در Spring Boot

سلام دوستان عزیز
در این پیام به یکی از بنیادی‌ترین مفاهیم Spring Boot می‌پردازیم؛ مفهومی که تقریباً در تمام بخش‌های پروژه‌های حرفه‌ای استفاده می‌شود و نقش کلیدی در تمیزی معماری دارد. این مفهوم چیزی نیست جز تزریق وابستگی یا Dependency Injection.


۱) مفهوم Dependency Injection

«تزریق» وابستگی به این معناست که یک کلاس، اشیای موردنیاز خود را **خودش نسازد**، بلکه آن‌ها را از بیرون دریافت کند. در Spring Boot این کار توسط Spring Container انجام می‌شود.
این رویکرد باعث کاهش وابستگی مستقیم بین کلاس‌ها و افزایش تست‌پذیری و انعطاف‌پذیری برنامه می‌شود.

به بیان ساده، کلاس‌ها فقط اعلام می‌کنند به چه چیزی نیاز دارند و Spring آن را فراهم می‌کند.


۲) مشکل ساخت مستقیم اشیا

«مشکل» روش سنتی این است که کلاس‌ها به هم وابستگی شدید پیدا می‌کنند. مثال زیر یک روش نامناسب است:


public class OrderService {
private EmailSender emailSender = new EmailSender();
}


در این حالت OrderService به پیاده‌سازی EmailSender قفل شده است و تغییر یا تست آن بسیار دشوار می‌شود.


۳) تزریق وابستگی با Constructor Injection

«تزریق» از طریق سازنده بهترین و توصیه‌شده‌ترین روش در Spring است. در این روش وابستگی‌ها از طریق سازنده کلاس دریافت می‌شوند.


@Service
public class OrderService {

private final EmailSender emailSender;

public OrderService(EmailSender emailSender) {
this.emailSender = emailSender;
}
}


در این مثال، Spring به صورت خودکار Bean مربوط به EmailSender را ساخته و تزریق می‌کند. این روش امن، شفاف و قابل تست است.


۴) تزریق وابستگی با Field Injection

«تزریق» فیلدی با استفاده از @Autowired انجام می‌شود. هرچند این روش ساده‌تر به نظر می‌رسد، اما توصیه نمی‌شود.


@Service
public class OrderService {

@Autowired
private EmailSender emailSender;
}


این روش تست‌پذیری را کاهش می‌دهد و وابستگی‌ها را مخفی می‌کند.


۵) تزریق وابستگی با Setter Injection

«تزریق» از طریق Setter برای مواقعی استفاده می‌شود که وابستگی اختیاری باشد.


@Service
public class OrderService {

private EmailSender emailSender;

@Autowired
public void setEmailSender(EmailSender emailSender) {
this.emailSender = emailSender;
}
}


در این حالت می‌توان وابستگی را بعداً تغییر داد، اما برای وابستگی‌های اصلی توصیه نمی‌شود.


۶) استفاده از Interface در DI

«استفاده» از Interface باعث می‌شود وابستگی‌ها به پیاده‌سازی خاصی قفل نشوند.


public interface MessageSender {
void send(String message);
}



@Component
public class EmailSender implements MessageSender {
public void send(String message) {
System.out.println(message);
}
}



@Service
public class NotificationService {

private final MessageSender messageSender;

public NotificationService(MessageSender messageSender) {
this.messageSender = messageSender;
}
}


در این ساختار می‌توان به راحتی پیاده‌سازی‌ها را تغییر داد.


۷) جمع‌بندی پیام

«نتیجه» این است که Dependency Injection هسته‌ی اصلی Spring Boot محسوب می‌شود. استفاده از Constructor Injection به همراه Interfaceها باعث تولید کدی تمیز، قابل تست و حرفه‌ای می‌شود. در پیام بعدی وارد مبحث Configuration، فایل application.properties و مدیریت تنظیمات پروژه خواهیم شد.

#Spring


🆔 @javapro_ir
🆔 @group_javapro
👍71
میانترم جاوا - نسخه اول.rar
742.8 KB
نمونه سوال میانترم جاوا - نسخه اول

با پاسخ

فرمت:PDF

🆔 @javapro_ir
🆔 @group_javapro
Media is too big
VIEW IN TELEGRAM
مینی دوره Spring Boot- اپلیکیشن TODO

جلسه اول

بررسی نیازها


🆔 @javapro_ir
🆔 @group_javapro
Media is too big
VIEW IN TELEGRAM
مینی دوره Spring Boot- اپلیکیشن TODO

جلسه دوم

ایجاد پروژه و فایل داکر

🆔 @javapro_ir
🆔 @group_javapro
پروژه نقاشی به زبان جاوا.rar
1.1 MB
سورس کد پروژه برنامه نقاشی به زبان جاوا

🆔 @javapro_ir
🆔 @group_javapro
Media is too big
VIEW IN TELEGRAM
مینی دوره Spring Boot- اپلیکیشن TODO

جلسه سوم

🆔 @javapro_ir
🆔 @group_javapro
Media is too big
VIEW IN TELEGRAM
مینی دوره Spring Boot- اپلیکیشن TODO

جلسه چهارم

🆔 @javapro_ir
🆔 @group_javapro
Ping pong.rar
215.2 KB
سورس بازی پینگ پونگ به زبان جاوا

🆔 @javapro_ir
🆔 @group_javapro
Media is too big
VIEW IN TELEGRAM
مینی دوره Spring Boot- اپلیکیشن TODO

جلسه پنجم

🆔 @javapro_ir
🆔 @group_javapro
Media is too big
VIEW IN TELEGRAM
مینی دوره Spring Boot- اپلیکیشن TODO

جلسه ششم

🆔 @javapro_ir
🆔 @group_javapro
سورس پروژه بازی دوز به زبان جاوا😍👇