Spring Framework-এ Dependency Injection (DI) একটি মৌলিক ধারণা, যা Spring IoC (Inversion of Control) কনটেইনারের মাধ্যমে নির্ধারিত হয়। Bean Lifecycle এবং Bean Scope ডিপেনডেন্সি ইনজেকশনের গুরুত্বপূর্ণ অংশ যা Spring Bean-কে কিভাবে তৈরি, ব্যবস্থাপনা এবং ধ্বংস করা হয়, এবং Bean-এর প্রেক্ষাপটে তার অস্তিত্বের পরিধি কী হবে, তা নির্ধারণ করে।
Bean Lifecycle
Spring Bean Lifecycle বলতে, Spring IoC কনটেইনারের মধ্যে একটি Bean তৈরি, ব্যবহার এবং ধ্বংস হওয়া পর্যন্ত যে সমস্ত ধাপ অনুসরণ করা হয়, তাকে বুঝায়। Spring Bean Lifecycle সাধারণত নিম্নলিখিত স্টেপগুলোর মধ্যে চলে:
১. Bean Instantiation (Bean সৃষ্টি)
Spring কনটেইনার Bean ক্লাসের জন্য একটি নতুন অবজেক্ট তৈরি করে। এটি Bean Definition-এ নির্দেশিত কনস্ট্রাক্টর বা ফ্যাক্টরি মেথড ব্যবহার করে করা হয়।
২. Dependency Injection (ডিপেনডেন্সি ইনজেকশন)
Spring কনটেইনারের মাধ্যমে Bean এর ডিপেনডেন্সি (অন্য Bean বা প্রপার্টি) সেট করা হয়। এটি Constructor Injection, Setter Injection অথবা Field Injection এর মাধ্যমে করা যেতে পারে।
৩. Post-Processing (Post-Processing)
যখন Bean তৈরি হয়ে যায় এবং তার ডিপেনডেন্সি ইনজেক্ট করা হয়, তখন BeanPostProcessor ইন্টারফেসের মাধ্যমে Bean-এর উপর অতিরিক্ত প্রসেসিং বা কাস্টমাইজেশন করা যেতে পারে। উদাহরণস্বরূপ, একটি Bean এর প্রপার্টি বা স্টেট পরিবর্তন করা।
৪. Initialization (ইনিশিয়ালাইজেশন)
এটি একটি Bean এর ইনিশিয়াল স্টেট সেট করার প্রক্রিয়া। Spring Bean initialization করার জন্য @PostConstruct অ্যানোটেশন অথবা XML কনফিগারেশনের মধ্যে init-method প্যারামিটার ব্যবহার করতে পারে। এই সময় বিভিন্ন এক্সট্রা কনফিগারেশন যেমন, কনফিগারেশন ফাইল লোড করা অথবা ডাটাবেস কানেকশন স্থাপন করা হয়।
৫. Bean Destruction (ধ্বংস)
Bean এর জীবন শেষ হলে Spring কনটেইনার Bean কে ধ্বংস করে, যাতে রিসোর্স ফ্রি করা যায়। এটি @PreDestroy অ্যানোটেশন অথবা XML কনফিগারেশনে destroy-method প্যারামিটার ব্যবহার করে করা যেতে পারে। Bean destruction এর সময় রিসোর্স ক্লোজিং, ক্লিন-আপ ইত্যাদি কাজ করা হয়।
Bean Lifecycle Flow
- Bean Instantiation: Spring কনটেইনার Bean এর ইনস্ট্যান্স তৈরি করে।
- Dependency Injection: কনটেইনার Bean-এ তার ডিপেনডেন্সি ইনজেক্ট করে।
- Post-Processing: BeanPostProcessor এর মাধ্যমে কোনো কাস্টম প্রসেসিং করা হয়।
- Initialization: ইনিশিয়ালাইজেশন মেথড কল করা হয়।
- Usage: Bean ব্যবহৃত হয়।
- Destruction: Bean ধ্বংস করা হয় এবং রিসোর্স ক্লিন-আপ করা হয়।
Bean Scope
Spring Framework-এ Bean-এর Scope হলো একটি Bean এর জীবনকাল এবং তার অস্তিত্বের পরিধি। Spring বিভিন্ন ধরনের Bean Scope সাপোর্ট করে, যার মাধ্যমে আপনি কন্ট্রোল করতে পারেন একটি Bean কতটুকু সময় ধরে কনটেইনারে থাকবে।
১. Singleton Scope (ডিফল্ট Scope)
এটি Spring Framework-এ ডিফল্ট Bean Scope। Singleton scope-এ একটি Bean কনটেইনারের মধ্যে শুধুমাত্র একটি ইনস্ট্যান্স তৈরি হয় এবং সেটি পুরো অ্যাপ্লিকেশনে শেয়ার করা হয়। একটি Bean শুধুমাত্র একবার তৈরি হয় এবং কনটেইনার থেকে বারবার ব্যবহার করা হয়।
- বর্ণনা: প্রতিটি অ্যাপ্লিকেশন রানটাইমে শুধুমাত্র একটি Bean ইনস্ট্যান্স।
- ব্যবহার: যেসব Bean শুধুমাত্র একবার তৈরি হতে হবে এবং পুনরায় ব্যবহার করতে হবে।
@Component
public class MyBean {
// Singleton Scope, একমাত্র একটি Bean ইনস্ট্যান্স থাকবে।
}
২. Prototype Scope
Prototype scope-এ, Spring কনটেইনার প্রতিবার একটি Bean রিকোয়েস্টের জন্য নতুন ইনস্ট্যান্স তৈরি করে। এর মানে হলো প্রতিটি Bean রিকোয়েস্টের জন্য একটি নতুন Bean তৈরি হবে।
- বর্ণনা: প্রতিবার Bean এর জন্য নতুন ইনস্ট্যান্স তৈরি হয়।
- ব্যবহার: যেসব Bean প্রতি ব্যবহার বা রিকোয়েস্টে নতুন ইনস্ট্যান্স প্রয়োজন।
@Component
@Scope("prototype")
public class MyBean {
// Prototype Scope, প্রতিবার নতুন Bean ইনস্ট্যান্স তৈরি হবে।
}
৩. Request Scope
Request scope শুধুমাত্র HTTP রিকোয়েস্টের জন্য ব্যবহার করা হয়। প্রতিটি HTTP রিকোয়েস্টে একটি নতুন Bean তৈরি হয় এবং রিকোয়েস্টের শেষ হওয়া পর্যন্ত তার অস্তিত্ব থাকে।
- বর্ণনা: প্রতি HTTP রিকোয়েস্টে একটি নতুন Bean তৈরি হয়।
- ব্যবহার: ওয়েব অ্যাপ্লিকেশনগুলিতে যেগুলি প্রতিটি HTTP রিকোয়েস্টের জন্য একটি নতুন Bean চান।
@Component
@Scope("request")
public class MyBean {
// Request Scope, প্রতি HTTP রিকোয়েস্টে নতুন Bean তৈরি হবে।
}
৪. Session Scope
Session scope HTTP সেশন অনুযায়ী কাজ করে। প্রতিটি HTTP সেশনের জন্য একটি Bean তৈরি হয় এবং সেশন শেষ হওয়ার পর সেই Bean ধ্বংস হয়।
- বর্ণনা: প্রতি HTTP সেশনে একটি নতুন Bean তৈরি হয়।
- ব্যবহার: সেশন ভিত্তিক ডেটা রাখা।
@Component
@Scope("session")
public class MyBean {
// Session Scope, প্রতি HTTP সেশনে একটি নতুন Bean তৈরি হবে।
}
৫. Application Scope
Application scope Bean অ্যাপ্লিকেশন পর্যায়ে অ্যাক্সেসযোগ্য থাকে, মানে এটি একবার তৈরি হলে অ্যাপ্লিকেশন চলাকালীন সময় এটি শেয়ার করা হয় এবং কোনো HTTP রিকোয়েস্টের সাথে সম্পর্কিত থাকে না।
- বর্ণনা: অ্যাপ্লিকেশন চলাকালীন একমাত্র একটি Bean ইনস্ট্যান্স থাকে।
- ব্যবহার: ওয়েব অ্যাপ্লিকেশন যেখানে একটি Bean একাধিক সেশন বা রিকোয়েস্টে শেয়ার করা হয়।
@Component
@Scope("application")
public class MyBean {
// Application Scope, অ্যাপ্লিকেশন চলাকালীন একটি Bean ইনস্ট্যান্স থাকবে।
}
৬. Websocket Scope
Spring 4.0 থেকে Websocket scope যোগ করা হয়েছে। এটি শুধুমাত্র WebSocket সেশন ভিত্তিক। যখন WebSocket সেশন শুরু হয়, তখন Bean তৈরি হয় এবং WebSocket সেশন শেষ হলে Bean ধ্বংস হয়।
- বর্ণনা: WebSocket সেশন ভিত্তিক Bean তৈরি হয়।
- ব্যবহার: WebSocket ভিত্তিক অ্যাপ্লিকেশনগুলিতে।
@Component
@Scope("websocket")
public class MyBean {
// WebSocket Scope, WebSocket সেশন ভিত্তিক।
}
সারাংশ
- Bean Lifecycle: Spring Bean Lifecycle Bean এর তৈরি, ব্যবহার এবং ধ্বংসের প্রক্রিয়া নিয়ন্ত্রণ করে। এটি Spring IoC কনটেইনারের মাধ্যমে হয়, এবং বিভিন্ন ধাপে Bean Post-Processors, Initialization, এবং Destruction Methods ব্যবহৃত হয়।
- Bean Scope: Spring Bean Scope ডিপেন্ড করে Bean এর অস্তিত্বের পরিধি এবং জীবনকাল কেমন হবে। Singleton, Prototype, Request, Session, Application এবং Websocket সেগুলোর প্রধান ধরন।
Spring Dependency Injection এবং Bean Lifecycle এর মাধ্যমে Spring Framework একটি অত্যন্ত নমনীয় এবং কার্যকরী কনটেইনার তৈরি করে, যা ডিপেনডেন্সি ম্যানেজমেন্ট এবং অ্যাপ্লিকেশন কনফিগারেশনকে সহজ করে।
Read more