স্প্রিং ডিপেনডেন্সি ইনজেকশন (Dependency Injection - DI) হল একটি কোর কনসেপ্ট যা স্প্রিং ফ্রেমওয়ার্কের মাধ্যমে বিভিন্ন অবজেক্টের মধ্যে সম্পর্ক স্থাপন এবং নির্দিষ্ট Bean গুলি ইনজেক্ট করার প্রক্রিয়া। এটি কোডের নমনীয়তা বৃদ্ধি করে এবং ডিপেনডেন্সির মধ্যে লোose coupling তৈরি করে।
স্প্রিং ফ্রেমওয়ার্কে ডিপেনডেন্সি ইনজেকশনের জন্য বেশ কিছু অ্যানোটেশন আছে, যার মধ্যে @Resource একটি জনপ্রিয় অ্যানোটেশন যা JAX-WS (Java API for XML Web Services) থেকে এসেছে। এই অ্যানোটেশনটি স্প্রিং কনটেইনারে থাকা Bean গুলির মধ্যে নির্দিষ্ট Bean ইনজেক্ট করতে ব্যবহৃত হয়।
@Resource Annotation কি?
@Resource অ্যানোটেশনটি Java EE (Enterprise Edition) এর একটি অংশ যা স্প্রিং ফ্রেমওয়ার্কেও ব্যবহৃত হয়। এটি একটি ডিপেনডেন্সি ইনজেকশন অ্যানোটেশন, যা স্প্রিং কনটেইনারের মাধ্যমে নির্দিষ্ট Bean ইনজেক্ট করার জন্য ব্যবহৃত হয়। @Resource অ্যানোটেশনটি @Autowired অ্যানোটেশনের মতোই কাজ করে, তবে এটি নামের উপর ভিত্তি করে Bean ইনজেক্ট করার জন্য ব্যবহৃত হয়।
@Resource Annotation এর ভূমিকা
- নাম অনুসারে Bean ইনজেক্ট করা:
@Resourceঅ্যানোটেশনটির প্রধান বৈশিষ্ট্য হল এটি Bean এর নামের উপর ভিত্তি করে ডিপেনডেন্সি ইনজেক্ট করতে সাহায্য করে। অর্থাৎ, যদি একটি Bean এর নাম স্প্রিং কনটেইনারে নির্দিষ্ট করা থাকে, তবে সেই নামের সাথে সম্পর্কিত Bean স্বয়ংক্রিয়ভাবে ইনজেক্ট হয়ে যাবে। @Autowiredএর বিকল্প:@Autowiredঅ্যানোটেশনেও Bean ইনজেক্ট করা হয়, তবে@Autowiredসাধারণত টাইপের উপর ভিত্তি করে ডিপেনডেন্সি ইনজেক্ট করে, যেখানে@Resourceনামের উপর ভিত্তি করে কাজ করে।- সুনির্দিষ্ট Bean নির্বাচন: যখন একাধিক Bean একই ধরনের থাকে এবং তাদের মধ্যে নির্দিষ্ট একটি Bean নির্বাচন করতে হয়, তখন
@Resourceঅ্যানোটেশন ব্যবহার করা হয়।
@Resource এর ব্যবহার
স্প্রিং ফ্রেমওয়ার্কে @Resource অ্যানোটেশন ব্যবহারের সময় আমরা একটি name প্যারামিটার ব্যবহার করতে পারি। এটি Bean এর নাম দ্বারা ডিপেনডেন্সি ইনজেক্ট করতে সাহায্য করে।
উদাহরণ: @Resource ব্যবহার করে Bean ইনজেক্ট করা
Step ১: Bean তৈরি
@Component
public class EmployeeService {
public String getEmployeeDetails() {
return "Employee Details from EmployeeService";
}
}
@Component
public class DepartmentService {
@Resource(name = "employeeService") // Injecting EmployeeService Bean by name
private EmployeeService employeeService;
public String getDepartmentDetails() {
return "Department Details along with: " + employeeService.getEmployeeDetails();
}
}
এখানে, DepartmentService ক্লাসে @Resource অ্যানোটেশন ব্যবহার করে employeeService Bean ইনজেক্ট করা হয়েছে। name = "employeeService" প্যারামিটার দ্বারা স্প্রিং কনটেইনার থেকে EmployeeService Bean ইনজেক্ট হবে।
Step ২: স্প্রিং কনফিগারেশন
@Configuration
@ComponentScan("com.example")
public class AppConfig {
}
এখানে, @ComponentScan অ্যানোটেশন দিয়ে স্প্রিং কনটেইনারকে com.example প্যাকেজে থাকা সব Bean স্ক্যান করার জন্য নির্দেশ দেওয়া হয়েছে।
Step ৩: Main Application
public class MainApp {
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(AppConfig.class);
DepartmentService departmentService = context.getBean(DepartmentService.class);
System.out.println(departmentService.getDepartmentDetails()); // Output: Department Details along with: Employee Details from EmployeeService
context.close();
}
}
এখানে, DepartmentService Bean এর মধ্যে EmployeeService Bean ইনজেক্ট করা হয়েছে এবং এটি কার্যকরভাবে getDepartmentDetails() মেথডের মাধ্যমে কাজ করছে।
@Resource এবং @Autowired এর মধ্যে পার্থক্য
| ফিচার | @Autowired | @Resource |
|---|---|---|
| ইনজেকশন টাইপ | টাইপের উপর ভিত্তি করে | নামের উপর ভিত্তি করে |
| প্যারামিটার | @Autowired সাধারণত required প্যারামিটার ব্যবহার করে | @Resource name প্যারামিটার ব্যবহার করে |
| প্রাধান্য | ডিফল্ট Bean ইনজেক্ট করা হয় | যদি একই ধরনের Bean থাকে, তবে নামের উপর ভিত্তি করে ইনজেক্ট করা হয় |
| ব্যবহারযোগ্যতা | সাধারণত @Autowired অধিক ব্যবহৃত | স্পেসিফিক নাম বা name ব্যবহার করতে হয় |
@Resource এর সুবিধা
- নাম অনুযায়ী নির্দিষ্ট Bean নির্বাচন: যখন একাধিক Bean থাকে এবং আপনাকে নির্দিষ্ট Bean নির্বাচন করতে হয়, তখন
@Resourceব্যবহৃত হয়। - একমাত্র
nameপ্যারামিটার: এর মাধ্যমে আপনি Bean এর নাম ব্যবহার করে Bean ইনজেক্ট করতে পারবেন, যা কোডে আরও স্পষ্টতা আনে। - এটা জাভা EE স্ট্যান্ডার্ড:
@Resourceঅ্যানোটেশনটি Java EE এর একটি অংশ, তাই আপনি যদি Java EE ফ্রেমওয়ার্ক ব্যবহার করেন, তাহলে এটি খুবই সুবিধাজনক।
উপসংহার
@Resource অ্যানোটেশন স্প্রিং ডিপেনডেন্সি ইনজেকশনে একটি কার্যকরী টুল, যা স্প্রিং কনটেইনারের মধ্যে সুনির্দিষ্ট Bean ইনজেক্ট করতে ব্যবহৃত হয়। এটি @Autowired এর একটি বিকল্প, তবে @Resource Bean এর নামের উপর ভিত্তি করে ডিপেনডেন্সি ইনজেক্ট করতে সাহায্য করে। এর ব্যবহার কোডের সুনির্দিষ্টতা এবং পরিষ্কারতা নিশ্চিত করে, বিশেষ করে যখন একাধিক Bean একই ধরনের (same type) থাকে।