স্প্রিং ডিপেনডেন্সি ইনজেকশন (DI) এমন একটি প্রক্রিয়া, যেখানে স্প্রিং কনটেইনার ডিপেনডেন্সিগুলো (অবজেক্ট) স্বয়ংক্রিয়ভাবে ইনজেক্ট করে এবং অবজেক্টগুলির জীবনচক্র (Lifecycle) পরিচালনা করে। স্প্রিং ফ্রেমওয়ার্কে, প্রতিটি Bean এর একটি জীবনচক্র থাকে, যা কনটেইনার দ্বারা নিয়ন্ত্রিত হয়। স্প্রিং Bean এর Lifecycle এর মাধ্যমে, আপনি জানবেন কখন Bean তৈরি হবে, কখন সেটি ইনস্ট্যান্সিয়েট হবে, এবং কখন এটি ধ্বংস হবে।
স্প্রিং Bean Lifecycle এর মধ্যে বিভিন্ন ধাপ অন্তর্ভুক্ত থাকে, যেমন Bean তৈরি হওয়া, ইনজেকশন হওয়া, @PostConstruct এবং @PreDestroy এর মাধ্যমে কাস্টম initialization এবং destruction hooks পরিচালনা করা।
Spring Bean Lifecycle এর ধাপসমূহ
স্প্রিং Bean এর Lifecycle নিম্নলিখিত ধাপগুলো অনুসরণ করে:
- Bean Instantiation (Bean তৈরি করা)
- Dependency Injection (ডিপেনডেন্সি ইনজেকশন)
- Bean Initialization (ইনিশিয়ালাইজেশন)
- Bean Usage (ব্যবহার)
- Bean Destruction (বিন ধ্বংস)
1. Bean Instantiation (Bean তৈরি করা)
স্প্রিং কনটেইনার প্রথমে Bean তৈরি করে, সাধারণত @Component অ্যানোটেশন বা XML কনফিগারেশনের মাধ্যমে Bean ডিফিনিশন দেওয়া হয়।
উদাহরণ: Bean Instantiation
@Component
public class Employee {
private String name;
public Employee() {
System.out.println("Employee Bean Created");
}
// Getters and Setters
}
এখানে, Employee Bean স্প্রিং কনটেইনার দ্বারা ইনস্ট্যান্সিয়েট করা হবে। স্প্রিং কনটেইনার যখন Bean তৈরি করে, তখন কনস্ট্রাক্টরটি কল হয় এবং "Employee Bean Created" মেসেজটি প্রিন্ট হবে।
2. Dependency Injection (ডিপেনডেন্সি ইনজেকশন)
স্প্রিং কনটেইনার Bean তৈরি করার পর, ডিপেনডেন্সি ইনজেকশন প্রক্রিয়া শুরু হয়। @Autowired অ্যানোটেশন ব্যবহার করে ডিপেনডেন্সি ইনজেক্ট করা হয়, অথবা XML কনফিগারেশনের মাধ্যমে ইনজেকশন পরিচালনা করা হয়।
উদাহরণ: Dependency Injection
@Component
public class EmployeeService {
@Autowired
private Employee employee;
public void displayEmployeeInfo() {
System.out.println("Employee Name: " + employee.getName());
}
}
এখানে, EmployeeService Bean এর মধ্যে Employee Bean কে ইনজেক্ট করা হচ্ছে স্প্রিং কনটেইনার দ্বারা।
3. Bean Initialization (ইনিশিয়ালাইজেশন)
Bean তৈরি হওয়ার পর, Initialization প্রক্রিয়া শুরু হয়। স্প্রিং Bean এর Initialization এর জন্য কিছু স্পেশাল মেথড এবং অ্যানোটেশন আছে, যেমন:
@PostConstructঅ্যানোটেশনInitializingBeanInterface (কাস্টম ইনিশিয়ালাইজেশন)- XML কনফিগারেশনে
init-method
উদাহরণ: @PostConstruct এবং InitializingBean ব্যবহার করা
@PostConstruct ব্যবহার
@Component
public class Employee {
private String name;
@PostConstruct
public void init() {
System.out.println("Employee Bean Initialized");
}
// Getters and Setters
}
এখানে, @PostConstruct অ্যানোটেশন ব্যবহার করে init() মেথডটি Bean ইনিশিয়ালাইজ হওয়ার পর স্বয়ংক্রিয়ভাবে কল হবে।
InitializingBean Interface ব্যবহার
@Component
public class EmployeeService implements InitializingBean {
@Autowired
private Employee employee;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("EmployeeService Bean Initialized");
}
public void displayEmployeeInfo() {
System.out.println("Employee Name: " + employee.getName());
}
}
এখানে, afterPropertiesSet() মেথডটি InitializingBean ইন্টারফেসের অংশ, যা Bean এর প্রোপার্টি ইনজেক্ট হওয়ার পর কল হয়।
4. Bean Usage (ব্যবহার)
Bean ইনিশিয়ালাইজ হওয়ার পর, এটি ব্যবহৃত হতে থাকে। স্প্রিং কনটেইনার Bean টি অ্যাপ্লিকেশন কোডে ব্যবহারের জন্য সরবরাহ করে।
উদাহরণ: Bean Usage
@Component
public class Application {
@Autowired
private EmployeeService employeeService;
public void run() {
employeeService.displayEmployeeInfo();
}
}
এখানে, employeeService Bean ব্যবহার করা হচ্ছে। Bean তৈরি, ইনজেকশন এবং ইনিশিয়ালাইজ করার পর এটি অ্যাপ্লিকেশনের মধ্যে ব্যবহার করা হচ্ছে।
5. Bean Destruction (বিন ধ্বংস)
Bean ব্যবহার শেষে Destruction প্রক্রিয়া শুরু হয়। স্প্রিং Bean এর ধ্বংসের জন্য কিছু স্পেশাল মেথড এবং অ্যানোটেশন আছে, যেমন:
@PreDestroyঅ্যানোটেশনDisposableBeanInterface (কাস্টম ডিসট্রাকশন)- XML কনফিগারেশনে
destroy-method
উদাহরণ: @PreDestroy এবং DisposableBean ব্যবহার
@PreDestroy ব্যবহার
@Component
public class Employee {
private String name;
@PreDestroy
public void cleanup() {
System.out.println("Employee Bean Destroyed");
}
// Getters and Setters
}
এখানে, @PreDestroy অ্যানোটেশন ব্যবহার করে cleanup() মেথডটি Bean ধ্বংস হওয়ার আগে কল হবে।
DisposableBean Interface ব্যবহার
@Component
public class EmployeeService implements DisposableBean {
@Autowired
private Employee employee;
@Override
public void destroy() throws Exception {
System.out.println("EmployeeService Bean Destroyed");
}
public void displayEmployeeInfo() {
System.out.println("Employee Name: " + employee.getName());
}
}
এখানে, destroy() মেথডটি DisposableBean ইন্টারফেসের অংশ, যা Bean ধ্বংস হওয়ার সময় কল হবে।
সারাংশ
স্প্রিং Bean Lifecycle একটি গুরুত্বপূর্ণ অংশ, যা স্প্রিং কনটেইনারের মাধ্যমে Bean তৈরি, ইনজেকশন, ইনিশিয়ালাইজেশন এবং ধ্বংসের পুরো প্রক্রিয়াকে নিয়ন্ত্রণ করে। স্প্রিং Bean Lifecycle এর ধাপগুলো হল:
- Bean Instantiation: Bean তৈরি করা।
- Dependency Injection: Bean এ ডিপেনডেন্সি ইনজেকশন করা।
- Bean Initialization: Bean ইনিশিয়ালাইজ করা।
- Bean Usage: Bean ব্যবহার করা।
- Bean Destruction: Bean ধ্বংস করা।
@PostConstruct এবং @PreDestroy অ্যানোটেশন, InitializingBean ও DisposableBean ইন্টারফেস ব্যবহার করে স্প্রিং Bean Lifecycle কে কাস্টমাইজ করা যায়। এসব টেকনিক অ্যাপ্লিকেশনের মেইনটেইনেবিলিটি এবং ফ্লেক্সিবিলিটি বাড়াতে সাহায্য করে।
Read more