Bean Lifecycle কি?
Bean Lifecycle বা বীন জীবন্ত চক্র হলো স্প্রিং কন্টেইনারে একটি বীনের (অবজেক্ট) সৃষ্টির শুরু থেকে তার ধ্বংস হওয়া পর্যন্ত সমস্ত পর্যায়। স্প্রিং কন্টেইনার একটি বীন তৈরি, কনফিগার, ইনজেক্ট এবং ব্যবহারের মাধ্যমে তার জীবনচক্র পরিচালনা করে। এর মধ্যে অবজেক্টের তৈরি হওয়া, তার ডিপেনডেন্সি ইনজেক্ট করা, ব্যবহার করা এবং শেষপর্যন্ত অব্যবহৃত বা ধ্বংস হওয়ার পর্যায়গুলি অন্তর্ভুক্ত থাকে।
স্প্রিং কন্টেইনারের মাধ্যমে যে সমস্ত ধাপগুলি সম্পন্ন হয় তা Bean Lifecycle হিসেবে পরিচিত।
Spring Bean Lifecycle এর ধাপ
স্প্রিং কন্টেইনারে বীনের জীবনের বিভিন্ন ধাপের মধ্যে কয়েকটি গুরুত্বপূর্ণ পর্যায় রয়েছে:
- Bean Definition: প্রথমে, স্প্রিং কন্টেইনার একটি বীনের সংজ্ঞা তৈরি করে যা বীনের কনফিগারেশন বা ডিফিনিশন প্রকাশ করে।
- Bean Instantiation: এরপর, স্প্রিং কন্টেইনার বীনের একটি ইনস্ট্যান্স তৈরি করে।
- Dependency Injection: স্প্রিং কন্টেইনার বীনের প্রপার্টিগুলিতে ডিপেনডেন্সি ইনজেক্ট করে।
- Bean Initialization: বীনের ইনিশিয়ালাইজেশন প্রক্রিয়া চলে।
- Bean Ready to Use: বীনের সমস্ত প্রক্রিয়া সম্পূর্ণ হওয়ার পর এটি ব্যবহারের জন্য প্রস্তুত থাকে।
- Bean Destruction: একবার বীন ব্যবহৃত না হলে, কন্টেইনার তা ধ্বংস করে।
স্প্রিং বীন লাইফসাইকেল কনফিগারেশন ফাইল (XML) বা অ্যানোটেশন ভিত্তিক কনফিগারেশন অনুসারে পরিচালিত হতে পারে। এধরণের প্রক্রিয়া স্প্রিং কন্টেইনার দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হয়, কিন্তু আপনি কাস্টমাইজড কনফিগারেশন বা ইভেন্ট হ্যান্ডলার ব্যবহার করেও এটি নিয়ন্ত্রণ করতে পারেন।
Bean Lifecycle এর ধাপ এবং তার বিশদ ব্যাখ্যা
১. Bean Definition
স্প্রিং কন্টেইনারে একটি বীনের প্রথম ধাপ হলো তার bean definition তৈরি করা। এটি বীনের শ্রেণি (class), প্রপার্টি এবং কনফিগারেশন মেটাডেটা ধারণ করে।
XML কনফিগারেশন উদাহরণ:
<bean id="myBean" class="com.example.MyClass">
<property name="name" value="Spring Bean"/>
</bean>
Java কনফিগারেশন উদাহরণ:
@Configuration
public class AppConfig {
@Bean
public MyClass myBean() {
return new MyClass("Spring Bean");
}
}
২. Bean Instantiation
এটি প্রথম ধাপের পরে দ্বিতীয় ধাপ, যেখানে স্প্রিং কন্টেইনার bean instantiation (বীন ইনস্ট্যানশিয়েশন) শুরু করে, অর্থাৎ MyClass ক্লাসের একটি অবজেক্ট তৈরি করা হয়।
স্প্রিং কন্টেইনার একটি বীন তৈরি করতে কন্সট্রাকটর বা setter methods ব্যবহার করে।
৩. Dependency Injection
একবার বীন ইনস্ট্যানশিয়েট হলে, dependency injection এর মাধ্যমে, স্প্রিং কন্টেইনার বীনের প্রপার্টিতে ডিপেনডেন্সি ইনজেক্ট করে। এটি constructor injection, setter injection, বা field injection এর মাধ্যমে হতে পারে।
Constructor Injection উদাহরণ:
public class MyClass {
private String name;
public MyClass(String name) {
this.name = name;
}
}
Setter Injection উদাহরণ:
public class MyClass {
private String name;
@Autowired
public void setName(String name) {
this.name = name;
}
}
৪. Bean Initialization
স্প্রিং বীন ইন্সট্যানশিয়েশন এবং ডিপেনডেন্সি ইনজেকশন করার পরে, বীনের initialization প্রক্রিয়া শুরু হয়। এটি @PostConstruct অ্যানোটেশন বা InitializingBean ইন্টারফেসের মাধ্যমে পরিচালিত হয়।
@PostConstruct উদাহরণ:
import javax.annotation.PostConstruct;
public class MyClass {
private String name;
@PostConstruct
public void init() {
System.out.println("Bean is initialized: " + name);
}
}
InitializingBean ইন্টারফেস উদাহরণ:
import org.springframework.beans.factory.InitializingBean;
public class MyClass implements InitializingBean {
private String name;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Bean is initialized: " + name);
}
}
৫. Bean Ready to Use
একবার initialization শেষ হলে, বীন ready to use থাকে। এই মুহূর্তে এটি কনটেইনার দ্বারা ব্যবহৃত হতে পারে, যেমন অন্যান্য বীনের জন্য ডিপেনডেন্সি হিসেবে ব্যবহার।
৬. Bean Destruction
স্প্রিং কন্টেইনার যখন বীনটির আর কোনো ব্যবহার থাকে না (অথবা কন্টেইনার বন্ধ হয়ে যায়), তখন Bean Destruction ঘটে। এটি @PreDestroy অ্যানোটেশন বা DisposableBean ইন্টারফেস ব্যবহার করে কাস্টম ক্লিনআপ কোড এক্সিকিউট করতে সাহায্য করে।
@PreDestroy উদাহরণ:
import javax.annotation.PreDestroy;
public class MyClass {
private String name;
@PreDestroy
public void cleanup() {
System.out.println("Bean is destroyed: " + name);
}
}
DisposableBean ইন্টারফেস উদাহরণ:
import org.springframework.beans.factory.DisposableBean;
public class MyClass implements DisposableBean {
private String name;
@Override
public void destroy() throws Exception {
System.out.println("Bean is destroyed: " + name);
}
}
Spring Bean Lifecycle এর সারাংশ
স্প্রিং কন্টেইনার Bean Lifecycle এর মাধ্যমে বীনের জীবনচক্র পরিচালনা করে, যেখানে বীনের তৈরি হওয়া, ডিপেনডেন্সি ইনজেকশন, ইনিশিয়ালাইজেশন এবং ধ্বংসের প্রক্রিয়া সম্পন্ন হয়। এই জীবনচক্রের প্রতিটি ধাপ স্প্রিং কন্টেইনার দ্বারা পরিচালিত হয়, তবে আপনি নিজের কাস্টম initialization এবং destruction লজিক প্রয়োগ করতে পারেন @PostConstruct, @PreDestroy বা ইন্টারফেস ব্যবহার করে।
স্প্রিং এর IoC (Inversion of Control) কন্টেইনার এই পুরো প্রক্রিয়াটি নিয়ন্ত্রণ করে, যাতে অবজেক্টের ডিপেনডেন্সি ইনজেকশন এবং তার জীবনচক্রের প্রতিটি ধাপ স্বয়ংক্রিয়ভাবে পরিচালিত হয়।
Read more