Setter Injection কি?
Setter Injection হল স্প্রিং ডিপেনডেন্সি ইনজেকশন (DI) পদ্ধতির একটি প্রকার, যেখানে অবজেক্টের ডিপেনডেন্সি (অন্য অবজেক্ট বা ভ্যালু) স্যাটার মেথডের মাধ্যমে ইনজেক্ট করা হয়। এই পদ্ধতিতে স্প্রিং কন্টেইনার ডিপেনডেন্সি ইনজেক্ট করার জন্য কনস্ট্রাকটরের পরিবর্তে একটি স্যাটার মেথড ব্যবহার করে।
Setter Injection এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন করার সময়, আপনি ডিপেনডেন্সি ভ্যালুগুলিকে স্যাটার মেথডের মাধ্যমে সরবরাহ করেন, যা স্প্রিং কন্টেইনার ব্যবহার করে স্বয়ংক্রিয়ভাবে পরিচালিত হয়।
Setter Injection এর প্রয়োগ
Setter Injection এ স্প্রিং কন্টেইনার @Autowired অ্যানোটেশন বা XML কনফিগারেশন ফাইল ব্যবহার করে ডিপেনডেন্সি ইনজেক্ট করে।
এটি সাধারণত যখন:
- ডিপেনডেন্সি ঐচ্ছিক (optional) থাকে, এবং সব সময় প্রয়োজনীয় না হয়।
- একাধিক ডিপেনডেন্সি থাকে, এবং এগুলো সহজে পরিবর্তনযোগ্য।
Setter Injection উদাহরণ
উদাহরণ ১: Java কনফিগারেশন ব্যবহার করে Setter Injection
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Car {
private Engine engine;
// Setter Injection
@Autowired
public void setEngine(Engine engine) {
this.engine = engine;
}
public void start() {
engine.run();
}
}
@Component
public class Engine {
public void run() {
System.out.println("Engine is running...");
}
}
ব্যাখ্যা:
@Autowired: এটি স্প্রিং ফ্রেমওয়ার্কের অ্যানোটেশন যা স্প্রিং কন্টেইনারকে বলে দেয় যেEngineঅবজেক্টটিCarক্লাসে ইনজেক্ট করতে হবে।setEngine: এটি একটি স্যাটার মেথড, যাEngineডিপেনডেন্সি ইনজেক্ট করতে ব্যবহৃত হয়।- স্প্রিং কন্টেইনার
Carঅবজেক্টটি তৈরি করে এবংEngineঅবজেক্টটিsetEngineমেথডের মাধ্যমে ইনজেক্ট করে।
স্প্রিং কনফিগারেশন (XML) ব্যবহার করে:
<bean id="engine" class="com.example.Engine"/>
<bean id="car" class="com.example.Car">
<property name="engine" ref="engine"/>
</bean>
এখানে <property> ট্যাগ ব্যবহার করে স্প্রিং কনটেইনার Engine অবজেক্ট ইনজেক্ট করবে Car ক্লাসে।
Setter Injection এর সুবিধা
- ইনজেকশন শর্তাধীন: আপনি শুধুমাত্র যখন প্রয়োজন তখন ইনজেক্ট করতে পারেন। মানে, এক্সটেনশনের জন্য সেটার মেথডে ডিপেনডেন্সি সরবরাহ করা সহজ।
- অবজেক্টের পরিবর্তনশীলতা: Setter Injection এর মাধ্যমে আপনি অবজেক্টের ডিপেনডেন্সি মেথডের মাধ্যমে সহজেই পরিবর্তন করতে পারেন, যা কনফিগারেশনে নমনীয়তা বৃদ্ধি করে।
- ডিপেনডেন্সি অপশনাল: ডিপেনডেন্সি কখনও কখনও ঐচ্ছিক (optional) থাকতে পারে, এবং সেক্ষেত্রে স্যাটার ইনজেকশন খুবই উপকারী।
- সাবক্লাসিং এবং টেস্টিং সহজ: এটি ডিপেনডেন্সি মকিং (Mocking) এবং টেস্টিংয়ের জন্য উপকারী, কারণ এটি সরাসরি ইনজেক্ট না করে স্যাটার মেথডের মাধ্যমে মান ইনজেক্ট করে।
Setter Injection এর সীমাবদ্ধতা
- কনস্ট্রাকটর ইনজেকশনকে পরিবর্তন করে: যখন ডিপেনডেন্সি ঐচ্ছিক নয়, তখন কনস্ট্রাকটর ইনজেকশন আরও সুনির্দিষ্ট এবং নিরাপদ পদ্ধতি হতে পারে।
- অবজেক্টের অপর্যাপ্ত অবস্থা: কখনও কখনও, setter method এর মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করলে, অবজেক্টটি পুরোপুরি প্রস্তুত না হয়ে থাকতে পারে (যতক্ষণ না স্যাটার মেথডে ডিপেনডেন্সি ইনজেক্ট করা না হয়)।
- সহজ টেস্টিং: ফিল্ড ইনজেকশন বা কনস্ট্রাকটর ইনজেকশনের তুলনায় স্যাটার ইনজেকশন কোডের রক্ষণাবেক্ষণ কিছুটা জটিল হতে পারে।
সারাংশ
Setter Injection হল স্প্রিং ডিপেনডেন্সি ইনজেকশন (DI) পদ্ধতির একটি প্রকার, যেখানে অবজেক্টের ডিপেনডেন্সি স্যাটার মেথডের মাধ্যমে ইনজেক্ট করা হয়। এই পদ্ধতিটি সাধারণত তখন ব্যবহার করা হয় যখন ডিপেনডেন্সি ঐচ্ছিক হয় বা অবজেক্টের ডিপেনডেন্সি সহজভাবে পরিবর্তনযোগ্য হতে হয়। Setter Injection এর মাধ্যমে ইনজেক্ট করা ডিপেনডেন্সিগুলি স্প্রিং কন্টেইনার দ্বারা সরবরাহ করা হয় এবং এটি সহজ এবং নমনীয় কোড ডিজাইন তৈরি করতে সাহায্য করে।
Read more