Spring DI তে @Resource Annotation

স্প্রিং ডিপেনডেন্সি ইনজেকশন (ডিআই) (Spring Dependency Injection) - Java Technologies

283

Spring Dependency Injection (DI) হল Spring Framework-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডিপেনডেন্সি ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। Spring DI ব্যবহার করার মাধ্যমে আপনি অবজেক্টগুলির মধ্যে সম্পর্ক ও ডিপেনডেন্সি ইনজেক্ট করতে পারেন। @Resource অ্যানোটেশন হল Java EE এর অংশ, যা Spring DI-এ ব্যবহৃত হয় এবং এটি Java's JSR-250 স্পেসিফিকেশন অনুসরণ করে।

@Resource অ্যানোটেশন Spring DI-এ একটি Bean ইনজেক্ট করার জন্য ব্যবহৃত হয় এবং এটি @Autowired অ্যানোটেশনের মতো কাজ করে, তবে কিছু পার্থক্যও রয়েছে। @Resource অ্যানোটেশন ব্যবহার করার মাধ্যমে আপনি নির্দিষ্টভাবে Bean ইনজেক্ট করতে পারেন, তবে এটি bean name অনুসারে ডিপেনডেন্সি ইনজেক্ট করে, যেখানে @Autowired টাইপ অনুসারে কাজ করে।


@Resource Annotation-এর কাজ

@Resource অ্যানোটেশন প্রধানত দুটি কাজ করে:

  1. By Name Injection: এটি Bean-এর নাম অনুসারে ডিপেনডেন্সি ইনজেক্ট করে।
  2. By Type Injection: যদি নামের সাথে ম্যাচ না পাওয়া যায়, তবে এটি Bean-এর টাইপ অনুসারে ডিপেনডেন্সি ইনজেক্ট করে।

এটি @Autowired এর মতোই কাজ করে, তবে @Autowired ডিপেনডেন্সি ইনজেকশন টাইপ অনুসারে করে, যেখানে @Resource Bean নাম অনুসারে কাজ করে।


@Resource Annotation এর ব্যবহার

১. Bean ইনজেক্ট করা (By Name)

@Resource ব্যবহার করার মাধ্যমে Spring কনটেইনারে উপস্থিত Bean এর নাম দিয়ে একটি Bean ইনজেক্ট করা যায়।

@Component
public class Employee {
    private String name;

    public Employee(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
@Component
public class EmployeeService {
    
    @Resource(name = "employee")  // Injecting the Bean by name
    private Employee employee;

    public void printEmployeeDetails() {
        System.out.println(employee.getName());
    }
}

এখানে, @Resource(name = "employee") স্পষ্টভাবে employee নামে একটি Bean ইনজেক্ট করবে, যেটি Spring কনটেইনারে পূর্বে ডিফাইন করা হয়েছে।

২. Bean ইনজেক্ট করা (By Type)

যদি আপনি name প্যারামিটার ব্যবহার না করেন, তবে Spring Bean-এর type অনুসারে ডিপেনডেন্সি ইনজেক্ট করে। নিচে একটি উদাহরণ দেওয়া হলো:

@Component
public class EmployeeService {
    
    @Resource  // Automatically injects the Employee bean by type
    private Employee employee;

    public void printEmployeeDetails() {
        System.out.println(employee.getName());
    }
}

এখানে, @Resource অ্যানোটেশনটি Employee টাইপের Bean ইনজেক্ট করবে। Spring কনটেইনারে যদি একাধিক Employee Bean থাকে, তবে এটি নাম অনুসারে বা টপিক্যাল টাইপের মধ্যে একটি Bean নির্বাচন করবে।


@Resource এবং @Autowired এর মধ্যে পার্থক্য

বৈশিষ্ট্য@Autowired@Resource
Injection TypeBy Type (রিটার্ন টাইপ)By Name (Bean Name) বা By Type (টাইপ)
Optional Field@Autowired(required = false) ব্যবহার করা যেতে পারে@Resource ফিল্ড ইনজেকশন ঐচ্ছিক নয়
Dependency Resolutionটাইপ অনুসারে Bean ইনজেক্ট করা হয়প্রথমে নাম অনুসারে এবং পরবর্তীতে টাইপ অনুসারে
SpecificationSpring-specificJava EE (JSR-250) এবং Spring-specific

@Resource এর প্রয়োজনীয়তা

  1. Bean Name অনুযায়ী ইনজেকশন: যখন আপনি নিশ্চিতভাবে জানেন যে কোন Bean নামের উপর ভিত্তি করে ডিপেনডেন্সি ইনজেক্ট করতে হবে, তখন @Resource ব্যবহার করুন। এটি Spring DI-এ Bean এর নাম ব্যবহার করে ডিপেনডেন্সি সিলেক্ট করতে সহায়ক।
  2. Java EE স্ট্যান্ডার্ড: @Resource Java EE-র অংশ, তাই এটি আপনি Spring-এর বাইরে Java EE ভিত্তিক প্রকল্পে ব্যবহার করতে পারবেন, এবং এতে একই স্পেসিফিকেশন ব্যবহৃত হবে।
  3. প্রতিস্থাপনযোগ্যতা: Spring কনটেইনারের মধ্যে একাধিক Bean থাকার কারণে @Resource ব্যবহার করে স্পষ্টভাবে নির্দিষ্ট Bean ইনজেক্ট করা যায়, যা খুবই কার্যকরী।

@Resource এর মাধ্যমে Resource Injection উদাহরণ

১. Service and Repository Layer:

ধরা যাক, আপনার একটি Service লেয়ার এবং একটি Repository লেয়ার রয়েছে। Repository Bean-এর নামের ভিত্তিতে Service লেয়ারে Bean ইনজেক্ট করতে পারেন।

@Component
public class EmployeeRepository {
    public String getEmployeeName() {
        return "John Doe";
    }
}
@Component
public class EmployeeService {

    @Resource(name = "employeeRepository")
    private EmployeeRepository employeeRepository;

    public void printEmployeeDetails() {
        System.out.println(employeeRepository.getEmployeeName());
    }
}

এখানে, @Resource(name = "employeeRepository") ব্যবহার করে EmployeeRepository Bean ইনজেক্ট করা হয়েছে।


সারাংশ

@Resource অ্যানোটেশন Spring Dependency Injection-এ Bean ইনজেকশন করার একটি সুবিধাজনক উপায়, যা Spring কনটেইনারে Bean নাম বা টাইপ অনুসারে ডিপেনডেন্সি ইনজেক্ট করতে সাহায্য করে। এটি @Autowired এর মতো কাজ করলেও, Bean name-based ইনজেকশন সুবিধা প্রদান করে, যা ডিপেনডেন্সি ইনজেকশনকে আরও স্পষ্ট এবং কাস্টমাইজড করে তোলে। Spring DI-এ @Resource এর ব্যবহার বিশেষত তখন উপকারী যখন আপনাকে স্পষ্টভাবে কোন Bean ইনজেক্ট করতে হবে তা নির্দিষ্ট করতে হয়।


Content added By

স্প্রিং ডিপেনডেন্সি ইনজেকশন (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 এর ভূমিকা

  1. নাম অনুসারে Bean ইনজেক্ট করা: @Resource অ্যানোটেশনটির প্রধান বৈশিষ্ট্য হল এটি Bean এর নামের উপর ভিত্তি করে ডিপেনডেন্সি ইনজেক্ট করতে সাহায্য করে। অর্থাৎ, যদি একটি Bean এর নাম স্প্রিং কনটেইনারে নির্দিষ্ট করা থাকে, তবে সেই নামের সাথে সম্পর্কিত Bean স্বয়ংক্রিয়ভাবে ইনজেক্ট হয়ে যাবে।
  2. @Autowired এর বিকল্প: @Autowired অ্যানোটেশনেও Bean ইনজেক্ট করা হয়, তবে @Autowired সাধারণত টাইপের উপর ভিত্তি করে ডিপেনডেন্সি ইনজেক্ট করে, যেখানে @Resource নামের উপর ভিত্তি করে কাজ করে।
  3. সুনির্দিষ্ট 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 এর সুবিধা

  1. নাম অনুযায়ী নির্দিষ্ট Bean নির্বাচন: যখন একাধিক Bean থাকে এবং আপনাকে নির্দিষ্ট Bean নির্বাচন করতে হয়, তখন @Resource ব্যবহৃত হয়।
  2. একমাত্র name প্যারামিটার: এর মাধ্যমে আপনি Bean এর নাম ব্যবহার করে Bean ইনজেক্ট করতে পারবেন, যা কোডে আরও স্পষ্টতা আনে।
  3. এটা জাভা EE স্ট্যান্ডার্ড: @Resource অ্যানোটেশনটি Java EE এর একটি অংশ, তাই আপনি যদি Java EE ফ্রেমওয়ার্ক ব্যবহার করেন, তাহলে এটি খুবই সুবিধাজনক।

উপসংহার

@Resource অ্যানোটেশন স্প্রিং ডিপেনডেন্সি ইনজেকশনে একটি কার্যকরী টুল, যা স্প্রিং কনটেইনারের মধ্যে সুনির্দিষ্ট Bean ইনজেক্ট করতে ব্যবহৃত হয়। এটি @Autowired এর একটি বিকল্প, তবে @Resource Bean এর নামের উপর ভিত্তি করে ডিপেনডেন্সি ইনজেক্ট করতে সাহায্য করে। এর ব্যবহার কোডের সুনির্দিষ্টতা এবং পরিষ্কারতা নিশ্চিত করে, বিশেষ করে যখন একাধিক Bean একই ধরনের (same type) থাকে।

Content added By

Spring Dependency Injection (DI)-এ ব্যবহৃত দুটি গুরুত্বপূর্ণ অ্যানোটেশন হল @Autowired এবং @Resource। উভয় অ্যানোটেশনই Spring Beans-এর মধ্যে ডিপেনডেন্সি ইনজেকশন করতে ব্যবহৃত হয়, তবে তাদের ব্যবহার এবং কার্যক্রমে কিছু পার্থক্য রয়েছে।

নিচে @Autowired এবং @Resource এর মধ্যে প্রধান পার্থক্যগুলি তুলে ধরা হয়েছে:


1. @Autowired: Spring এর নিজস্ব অ্যানোটেশন

@Autowired হল Spring Framework-এর একটি অ্যানোটেশন, যা Spring Beans-এর মধ্যে ডিপেনডেন্সি ইনজেকশন করার জন্য ব্যবহৃত হয়। এটি Spring's Dependency Injection (DI) প্রক্রিয়ার অংশ এবং Spring এর নিজস্ব সমাধান।

@Autowired এর বৈশিষ্ট্য:

  • Automatic Injection: Spring Beans-এর মধ্যে ডিপেনডেন্সি ইনজেকশনের জন্য এটি নিজে থেকে মেলানো (auto-wiring) করে।
  • By Type: ডিফল্টভাবে, @Autowired টাইপের ভিত্তিতে Bean ইনজেক্ট করে। যদি একাধিক Bean একই টাইপের হয়, তবে এটি @Qualifier এর মাধ্যমে সঠিক Bean নির্বাচন করতে সাহায্য করে।
  • Required Attribute: @Autowired-এ required নামক একটি অ্যাট্রিবিউট থাকে, যার মান true (ডিফল্ট) হলে যদি ডিপেনডেন্সি মেলে না, তবে Spring একটি NoSuchBeanDefinitionException ছুড়ে দেয়। যদি false সেট করা হয়, তবে তা অপশনাল হয়ে যাবে।

উদাহরণ:

@Component
public class Car {
    
    @Autowired
    private Engine engine; // Engine Bean will be injected by type

    public void startCar() {
        engine.start();
    }
}

Required Attribute:

@Component
public class Car {

    @Autowired(required = false)
    private Engine engine; // Optional Dependency

    public void startCar() {
        if (engine != null) {
            engine.start();
        } else {
            System.out.println("Engine is not available.");
        }
    }
}

2. @Resource: Java EE অ্যানোটেশন

@Resource একটি Java EE অ্যানোটেশন (javax.annotation package) এবং এটি J2EE-এর অংশ ছিল, তবে Spring এও এটি ব্যবহার করা যেতে পারে। এটি JNDI (Java Naming and Directory Interface) রেফারেন্সিংয়ের জন্য তৈরি করা হয়েছিল, তবে Spring-এ এটি Bean ডিপেনডেন্সি ইনজেকশনের জন্য ব্যবহৃত হয়।

@Resource এর বৈশিষ্ট্য:

  • By Name: @Resource ডিফল্টভাবে Bean নামের (name) ভিত্তিতে ইনজেক্ট করে। এটি Spring-এর name অ্যাট্রিবিউটের সাথে Bean ইনজেকশন করে।
  • Supports Both By Name and By Type: যদি name অ্যাট্রিবিউট সঠিকভাবে দেওয়া না হয়, তবে by type ইনজেকশন করা হয়।
  • No required Attribute: @Resource অ্যানোটেশনে required অ্যাট্রিবিউট থাকে না, তবে Bean না পাওয়া গেলে NullPointerException হতে পারে।

উদাহরণ:

@Component
public class Car {
    
    @Resource(name = "engine")  // The "engine" bean will be injected by name
    private Engine engine;

    public void startCar() {
        engine.start();
    }
}

যদি @Resource ব্যবহার করা হয় এবং যদি name অ্যাট্রিবিউট না দেওয়া হয়, তবে Spring Bean টাইপের সাথে মেলে এমন Bean ইনজেক্ট করবে।


3. মূল পার্থক্য

বৈশিষ্ট্য@Autowired@Resource
টাইপ/নাম অনুযায়ী ইনজেকশনডিফল্টভাবে টাইপ অনুযায়ী ইনজেকশন হয়ডিফল্টভাবে নাম অনুযায়ী ইনজেকশন হয়
JNDI সমর্থননাহ্যাঁ, JNDI রেফারেন্সিং সমর্থন করে
required অ্যাট্রিবিউটrequired অ্যাট্রিবিউট রয়েছে (যা অপশনাল হতে পারে)required অ্যাট্রিবিউট থাকে না
কোডে ব্যবহারSpring specific (Spring DI)Java EE-specific, Spring এও ব্যবহার করা যায়
Bean নামের ভিত্তিতে ইনজেকশননাহ্যাঁ (যদি name অ্যাট্রিবিউট ব্যবহার করা হয়)
ফিল্ড বা স্যাটার ইনজেকশনব্যবহারযোগ্যব্যবহারযোগ্য

সারাংশ

  • @Autowired একটি Spring-specific অ্যানোটেশন যা by type ডিপেনডেন্সি ইনজেকশন করে, এবং এটি required অ্যাট্রিবিউট ব্যবহার করে Bean প্রয়োজনীয়তা নির্ধারণ করতে সাহায্য করে।
  • @Resource একটি Java EE অ্যানোটেশন যা মূলত by name ডিপেনডেন্সি ইনজেকশন করে এবং Spring এ এর মাধ্যমে by type বা by name ডিপেনডেন্সি ইনজেকশন করা সম্ভব।

যেহেতু Spring DI-এ @Autowired অধিক ব্যবহৃত, তা Spring এর নিজস্ব সমাধান হিসেবে কাজ করে। তবে, @Resource Java EE-এর অংশ হওয়ায় এটি কিছু ক্ষেত্রে ব্যবহার হতে পারে যেখানে Java EE এর অন্যান্য কনফিগারেশন সহ Spring ব্যবহার করা হয়।

Content added By

Spring Framework-এ Dependency Injection (DI) ব্যবহারে @Resource একটি শক্তিশালী অ্যানোটেশন যা javax.annotation প্যাকেজের অন্তর্গত। এটি একটি স্ট্যান্ডার্ড অ্যানোটেশন যা Spring কনটেইনারে একটি Bean ইনজেক্ট করতে ব্যবহৃত হয়। @Resource ব্যবহার করে আপনি Spring IoC কনটেইনার থেকে নির্দিষ্ট Bean ইনজেক্ট করতে পারেন এবং এটি name বা type অনুযায়ী Bean নির্বাচন করতে সক্ষম।

@Resource অ্যানোটেশন মূলত JSR-250 স্পেসিফিকেশন থেকে এসেছে এবং Spring Framework এ ডিপেনডেন্সি ইনজেকশন করার জন্য একটি সাধারণ উপায় হিসেবে ব্যবহৃত হয়। এটি Spring-এর @Autowired অ্যানোটেশন থেকে কিছুটা আলাদা, কারণ এটি name বা type অনুসারে ডিপেনডেন্সি ইনজেকশন করে।


@Resource অ্যানোটেশন এর দুটি প্রধান বৈশিষ্ট্য:

  1. By Name: যদি Bean এর নাম ঠিকভাবে ম্যাচ করে, তবে @Resource সেটি ইনজেক্ট করবে।
  2. By Type: যদি নাম ম্যাচ না করে, তবে @Resource Bean-এর টাইপের উপর ভিত্তি করে ডিপেনডেন্সি ইনজেক্ট করবে।

@Resource এর ব্যবহার

১. By Name ইনজেকশন

Spring কনটেইনার থেকে নির্দিষ্ট নামের Bean ইনজেক্ট করতে @Resource(name = "beanName") ব্যবহার করা হয়।

import javax.annotation.Resource;
import org.springframework.stereotype.Component;

@Component
public class EmployeeService {

    @Resource(name = "employeeRepository")
    private EmployeeRepository employeeRepository;

    public void getEmployeeDetails() {
        employeeRepository.findEmployee();
    }
}

এখানে @Resource(name = "employeeRepository") ব্যবহার করা হয়েছে। এটি Spring কনটেইনারের মধ্যে employeeRepository নামের Bean কে ইনজেক্ট করবে। employeeRepository নামটি Bean এর নামের সাথে মেলাতে হবে।

২. By Type ইনজেকশন

যদি আপনি name উল্লেখ না করেন, তবে @Resource type অনুসারে Bean নির্বাচন করবে। নিচে @Resource এর মাধ্যমে By Type ইনজেকশনের উদাহরণ দেখানো হয়েছে:

import javax.annotation.Resource;
import org.springframework.stereotype.Component;

@Component
public class EmployeeService {

    @Resource
    private EmployeeRepository employeeRepository;

    public void getEmployeeDetails() {
        employeeRepository.findEmployee();
    }
}

এখানে, @Resource টাইপের উপর ভিত্তি করে EmployeeRepository Bean ইনজেক্ট করবে। এখানে Bean এর নাম উল্লেখ না করলেও Spring কনটেইনার EmployeeRepository টাইপের Bean নির্বাচন করবে।

৩. By Name and Type Involvement

@Resource নাম এবং টাইপ উভয়ের মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করতে সাহায্য করে, তবে প্রথমে নাম অনুসারে এবং পরে টাইপ অনুসারে Bean নির্বাচিত হয়। এই উদাহরণে নাম এবং টাইপ উভয়ই ব্যবহার করা হয়েছে:

import javax.annotation.Resource;
import org.springframework.stereotype.Component;

@Component
public class EmployeeService {

    @Resource(name = "employeeRepository")
    private EmployeeRepository employeeRepository;

    @Resource
    private DepartmentService departmentService;

    public void getEmployeeDetails() {
        employeeRepository.findEmployee();
        departmentService.getDepartmentDetails();
    }
}

এখানে, employeeRepository Bean নাম দ্বারা নির্বাচিত হবে, এবং departmentService Bean টাইপ দ্বারা নির্বাচিত হবে।


@Resource ব্যবহার করার জন্য প্রয়োজনীয় Bean কনফিগারেশন

১. Bean Configuration Using XML

XML কনফিগারেশনের মাধ্যমে @Resource অ্যানোটেশন দ্বারা Bean ইনজেকশন করার জন্য আপনাকে XML ফাইলে context:component-scan কনফিগার করতে হবে:

<context:component-scan base-package="com.example"/>

এটি Spring কনটেইনারকে কম্পোনেন্ট ক্লাসগুলো (যেমন @Component ব্যবহার করা ক্লাসগুলো) স্ক্যান করতে বলে এবং তাদেরকে Bean হিসাবে রেজিস্টার করে।

২. Bean Configuration Using Java Configuration

Java Config-এ @ComponentScan ব্যবহার করা যেতে পারে, যা Spring কনটেইনারকে কম্পোনেন্ট স্ক্যান করতে নির্দেশ দেয়।

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}

এই কনফিগারেশনটি Spring কনটেইনারকে com.example প্যাকেজের মধ্যে থাকা সমস্ত কম্পোনেন্ট ক্লাসগুলো স্ক্যান করে এবং Bean হিসেবে নিবন্ধন করতে নির্দেশ দেয়।


@Resource vs @Autowired

@Resource এবং @Autowired দুটি প্রধান Dependency Injection অ্যানোটেশন, তবে তাদের মধ্যে কিছু পার্থক্য রয়েছে:

বৈশিষ্ট্য@Autowired@Resource
Injection TypeType-based InjectionName-based (Primarily) or Type-based Injection
Default BehaviorBy Type (can be overridden by @Qualifier)By Name (can fall back to By Type)
UsageMostly used in Spring-specific contextsJSR-250 standard for dependency injection

উদাহরণ:

  • @Autowired: Sping Bean কনটেইনারের মধ্যে Bean-কে টাইপের ভিত্তিতে ইনজেক্ট করে।

    @Autowired
    private EmployeeRepository employeeRepository;
    
  • @Resource: Sping Bean কনটেইনারে Bean এর নাম বা টাইপের ভিত্তিতে ইনজেক্ট করে।

    @Resource(name = "employeeRepository")
    private EmployeeRepository employeeRepository;
    

সারাংশ

@Resource অ্যানোটেশনটি Spring Framework-এ ডিপেনডেন্সি ইনজেকশন করার জন্য একটি জাভা স্ট্যান্ডার্ড অ্যানোটেশন। এটি name বা type এর ভিত্তিতে Bean ইনজেক্ট করতে ব্যবহৃত হয়। এটি Spring-এ ব্যবহৃত @Autowired এর থেকে আলাদা, কারণ @Autowired শুধু type-based ইনজেকশন সমর্থন করে, তবে @Resource এর মাধ্যমে আপনি নাম (name-based) এবং টাইপ (type-based) উভয়ই ভিত্তিতে ইনজেকশন করতে পারেন। @Resource JSR-250 স্পেসিফিকেশন থেকে এসেছে এবং Spring-এর বাইরেও অন্যান্য Java EE কনটেক্সটে ব্যবহারযোগ্য।

Content added By
Promotion

Are you sure to start over?

Loading...