برنامه نویسی جاوا | جاواپرو – 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 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
سورس پروژه بازی دوز به زبان جاوا😍👇
Media is too big
VIEW IN TELEGRAM
مینی دوره Spring Boot- اپلیکیشن TODO

جلسه هفتم(آخر)

🆔 @javapro_ir
🆔 @group_javapro
پروژه بازی pacman.rar
248.9 KB
سورس پروژه رایگان بازی pacman به زبان جاوا

🆔 @javapro_ir
🆔 @group_javapro
اتوماسیون انتقال داده از CSV به دیتابیس با Spring Boot و Spring Batch

من اخیراً یک پروژه با Spring Batch پیاده‌سازی کردم که وظیفه‌اش پردازش داده‌ها از یک فایل CSV و ذخیره آن‌ها در دیتابیس بود.
این پروژه کل جریان استاندارد Reader → Processor → Writer → Job → Listener را به‌صورت کامل پوشش می‌دهد.

در ادامه، اجزای اصلی این پروژه را مرحله‌به‌مرحله بررسی می‌کنیم 👇


📂 ۱. Reader (FlatFileItemReader)

این بخش فایل sample-data.csv را می‌خواند و هر سطر را به یک شیء از نوع Person نگاشت می‌کند.
@Bean
public FlatFileItemReader<Person> reader() {
return new FlatFileItemReaderBuilder<Person>()
.name("personItemReader")
.resource(new ClassPathResource("sample-data.csv"))
.delimited()
.names("firstName", "lastName")
.targetType(Person.class)
.build();
}


🛠 ۲. Processor (ItemProcessor)

در این مرحله، داده‌ها قبل از ذخیره‌سازی تغییر داده می‌شوند.
در این مثال، نام و نام خانوادگی هر شخص به حروف بزرگ (UPPERCASE) تبدیل می‌شود.
public class PersonItemProcessor implements ItemProcessor<Person, Person> {

@Override
public Person process(Person person) {
return new Person(
person.firstName().toUpperCase(),
person.lastName().toUpperCase()
);
}
}


💾 ۳. Writer (JdbcBatchItemWriter)

این بخش داده‌های پردازش‌شده را در جدول people دیتابیس درج می‌کند.

@Bean
public JdbcBatchItemWriter<Person> writer(DataSource dataSource) {
return new JdbcBatchItemWriterBuilder<Person>()
.sql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)")
.dataSource(dataSource)
.beanMapped()
.build();
}


⚙️ ۴. Job و Step

در این قسمت، Job و Step تعریف می‌شوند.
اندازه chunk برابر با ۳ است؛ یعنی:

۳ رکورد خوانده می‌شود

پردازش انجام می‌گیرد

در دیتابیس ذخیره می‌شود

این چرخه تا پایان فایل تکرار می‌شود

@Bean
public Step step1(
JobRepository jobRepository,
DataSourceTransactionManager transactionManager,
FlatFileItemReader<Person> reader,
PersonItemProcessor processor,
JdbcBatchItemWriter<Person> writer) {

return new StepBuilder("step1", jobRepository)
.<Person, Person>chunk(3, transactionManager)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}




📊 ۵. Listener (JobExecutionListener)

پس از اتمام Job، این Listener اجرا می‌شود تا صحت درج داده‌ها در دیتابیس بررسی شود.
@Override
public void afterJob(JobExecution jobExecution) {
if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
jdbcTemplate
.query(
"SELECT first_name, last_name FROM people",
new DataClassRowMapper<>(Person.class)
)
.forEach(person ->
log.info("Found <{}> in the database.", person)
);
}
}


چرا کار روی این پروژه جذاب بود؟

✔️ مدیریت بهینه دیتاست‌های حجیم با استفاده از پردازش Chunk
✔️ پیاده‌سازی یک خط لوله تمیز ETL (استخراج → تبدیل → بارگذاری)
✔️ تفکیک شفاف مسئولیت‌ها بین Reader، Processor و Writer

این پروژه تجربه عملی بسیار خوبی از استفاده واقعی Spring Boot و Spring Batch برای اتوماسیون پردازش داده‌ها فراهم کرد.

🆔 @javapro_ir
🆔 @group_javapro
پروژه بازی Brick Breaker.rar
1.3 MB
سورس پروژه بازی Brick Breaker به زبان جاوا

🆔 @javapro_ir
🆔 @group_javapro
۱۳+ سال تجربه به‌عنوان مهندس ارشد جاوا فول‌استک — آنچه از ساخت سیستم‌های سازمانی (Enterprise-Grade) آموخته‌ام

پس از فعالیت روی پلتفرم‌های مالی بزرگ در Wells Fargo، Freddie Mac، DBS Bank و Oracle، به این نتیجه رسیده‌ام که مهندسی سازمانی فقط نوشتن کد نیست؛ بلکه درباره مقیاس‌پذیری، تاب‌آوری، امنیت و قابلیت مشاهده‌پذیری (Observability) است.
آنچه من به تیم اضافه می‌کنم:

بک‌اند و میکروسرویس‌ها

Java، Spring Boot، REST APIs

تراکنش‌های توزیع‌شده، استراتژی‌های سراسری مدیریت Exception

Spring Batch برای پردازش‌های مالی سنگین


معماری‌های رویدادمحور (Event-Driven)

Kafka، ActiveMQ، JMS

مصرف‌کننده‌های Idempotent، Throttling، الگوهای Async


تحویل Cloud-Native

Docker، Kubernetes (EKS)، PCF، AWS، Azure

GitHub Actions، Jenkins، Spinnaker (CI/CD)

AppDynamics، Splunk، Kiali برای Observability


مهندسی داده

PostgreSQL، Oracle، MariaDB، Teradata

طراحی ERD، Stored Procedure، Trigger

مهاجرت دیتابیس با Flyway


تجربه فرانت‌اند

React.js، Redux، Router

Memoization و بهینه‌سازی رندر


امنیت

OAuth2، JWT، LDAP، SAML

رفع آسیب‌پذیری‌ها (Fortify / DAST)


سیستم‌هایی که تحویل داده‌ام:

🏦 مدیریت اوراق قرضه

🏦 مخازن داده بازار سرمایه

💳 سیستم‌های بازخرید و پاداش

📊 سیستم‌های پیشنهاددهی و بازاریابی زمینه‌محور


مهم‌تر از همه، به معماری تمیز، استقرارهای قابل پیش‌بینی، سرویس‌های تاب‌آور و هم‌راستایی با اهداف کسب‌وکار اهمیت می‌دهم.


🆔 @javapro_ir
🆔 @group_javapro