Constructor Injection এবং Setter Injection এর ব্যবহার

Spring এর Dependency Injection (DI) - স্প্রিং (Spring) - Java Technologies

408

Spring Framework এর ডিপেনডেন্সি ইনজেকশন (Dependency Injection - DI) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা অবজেক্টগুলির মধ্যে সম্পর্ক পরিচালনা করে এবং তাদের নির্ভরশীলতাগুলি সরবরাহ করে। Spring এ ডিপেনডেন্সি ইনজেকশন করার দুটি প্রধান পদ্ধতি হল Constructor Injection এবং Setter Injection। এই দুটি পদ্ধতির মাধ্যমে আপনি ক্লাসের মধ্যে ডিপেনডেন্সি (অবজেক্টের সম্পর্ক) ইনজেক্ট করতে পারেন।

এই টিউটোরিয়ালে আমরা Constructor Injection এবং Setter Injection এর ব্যবহার এবং তাদের মধ্যে পার্থক্য সম্পর্কে বিস্তারিত আলোচনা করব।


Constructor Injection

Constructor Injection হল ডিপেনডেন্সি ইনজেকশনের একটি পদ্ধতি যেখানে ডিপেনডেন্সি (অবজেক্ট) ক্লাসের কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয়। এই পদ্ধতিতে, Spring কনস্ট্রাক্টরের ইনপুট প্যারামিটারগুলির মাধ্যমে ডিপেনডেন্সি প্রদান করে।

সুবিধা:

  1. Immutable Objects: কনস্ট্রাক্টর ইনজেকশন ব্যবহার করলে অবজেক্টটি immutable (অপরিবর্তনীয়) হয়, অর্থাৎ একবার সেট করা হলে ডিপেনডেন্সি পরিবর্তন করা যায় না।
  2. Required Dependencies: সমস্ত প্রয়োজনীয় ডিপেনডেন্সি ইনজেক্ট করা হয়, কারণ কনস্ট্রাক্টর কল করতে হলে সব প্যারামিটারকে প্রোভাইড করতে হবে।
  3. Compile-time checking: কনস্ট্রাক্টর ইনজেকশন ব্যবহার করলে কম্পাইল-টাইমে ডিপেনডেন্সি চেকিং করা সম্ভব হয়।

উদাহরণ: Constructor Injection

@Component
public class EmployeeService {

    private final EmployeeRepository employeeRepository;

    // Constructor Injection
    public EmployeeService(EmployeeRepository employeeRepository) {
        this.employeeRepository = employeeRepository;
    }

    public void saveEmployee(Employee employee) {
        employeeRepository.save(employee);
    }
}

@Component
public class EmployeeRepository {
    public void save(Employee employee) {
        System.out.println("Employee saved: " + employee.getName());
    }
}

এখানে:

  • EmployeeService ক্লাসের কনস্ট্রাক্টরটি EmployeeRepository কে ইনজেক্ট করে।
  • Spring কনটেইনার যখন EmployeeService ক্লাসের একটি অবজেক্ট তৈরি করবে, তখন EmployeeRepository স্বয়ংক্রিয়ভাবে কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হবে।

Spring Configuration (XML/Java Config):

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // Spring automatic DI will work based on constructor injection
}

এখানে, @Component অ্যানোটেশন দ্বারা Spring জানে যে, এই ক্লাসগুলি Spring Bean হিসেবে ব্যবহার হবে। Spring EmployeeService এর কনস্ট্রাক্টরকে স্বয়ংক্রিয়ভাবে EmployeeRepository ইনজেক্ট করবে।


Setter Injection

Setter Injection হল ডিপেনডেন্সি ইনজেকশনের আরেকটি পদ্ধতি, যেখানে ডিপেনডেন্সি (অবজেক্ট) ক্লাসের setter method এর মাধ্যমে ইনজেক্ট করা হয়। এই পদ্ধতিতে, আপনি setter methods তৈরি করেন, যেগুলোর মাধ্যমে Spring ডিপেনডেন্সি প্রদান করে।

সুবিধা:

  1. Optional Dependencies: যদি কোনো ডিপেনডেন্সি ঐচ্ছিক (optional) হয়, তাহলে সেটার জন্য setter injection সবচেয়ে ভালো।
  2. Flexibility: setter method ব্যবহার করার ফলে অবজেক্ট তৈরির পরে ডিপেনডেন্সি সেট করা যায়, তাই এটি কিছুটা লচিল হতে পারে।

উদাহরণ: Setter Injection

@Component
public class EmployeeService {

    private EmployeeRepository employeeRepository;

    // Setter Injection
    @Autowired
    public void setEmployeeRepository(EmployeeRepository employeeRepository) {
        this.employeeRepository = employeeRepository;
    }

    public void saveEmployee(Employee employee) {
        employeeRepository.save(employee);
    }
}

@Component
public class EmployeeRepository {
    public void save(Employee employee) {
        System.out.println("Employee saved: " + employee.getName());
    }
}

এখানে:

  • setEmployeeRepository মেথডের মাধ্যমে EmployeeRepository ইনজেক্ট করা হয়েছে।
  • Spring @Autowired অ্যানোটেশন দিয়ে setter method কে স্বয়ংক্রিয়ভাবে ইনজেক্ট করবে।

Spring Configuration (XML/Java Config):

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // Spring automatic DI will work based on setter injection
}

এখানে, @Autowired অ্যানোটেশনটি Springকে নির্দেশ দেয় যে এটি ইনজেকশন পয়েন্ট এবং Spring এই setter method এর মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করবে।


Constructor Injection এবং Setter Injection এর মধ্যে পার্থক্য

বৈশিষ্ট্যConstructor InjectionSetter Injection
মেথডকনস্ট্রাক্টর মাধ্যমে ইনজেকশনSetter মেথড মাধ্যমে ইনজেকশন
ডিপেনডেন্সিসব ডিপেনডেন্সি আবশ্যক (required dependencies)কিছু ডিপেনডেন্সি ঐচ্ছিক হতে পারে
অবজেক্টের পরিবর্তনএকবার ইনজেক্ট করার পর পরিবর্তন করা যায় নাইনজেকশন পরে ডিপেনডেন্সি পরিবর্তন করা সম্ভব
কমপ্লেক্সিটিএকটু কমপ্লেক্স (মেথড প্যারামিটার নিতে হবে)সহজ এবং সহজে পরিবর্তনযোগ্য
পছন্দের পরিস্থিতিযখন ডিপেনডেন্সি অপরিহার্যযখন ডিপেনডেন্সি ঐচ্ছিক বা লেট ইনজেকশন দরকার

সারাংশ

Constructor Injection এবং Setter Injection হল Spring DI (Dependency Injection) এর দুটি গুরুত্বপূর্ণ পদ্ধতি।

  • Constructor Injection ব্যবহার করা হয় যখন আপনি নিশ্চিত চান যে সব ডিপেনডেন্সি ইনজেক্ট হবে এবং এটি অপরিহার্য (required)।
  • Setter Injection ব্যবহার করা হয় যখন কিছু ডিপেনডেন্সি ঐচ্ছিক হতে পারে এবং আপনি মেথডের মাধ্যমে তাদের ইনজেক্ট করতে চান।

Spring Framework এ এই দুটি পদ্ধতি ব্যবহার করে আপনি আপনার ক্লাসের ডিপেনডেন্সিগুলি সরবরাহ করতে পারবেন এবং কার্যকরীভাবে কোডের পুনরাবৃত্তি কমাতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...