উদাহরণ সহ DI এর ব্যবহার

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

318

Dependency Injection (DI) হলো একটি ডিজাইন প্যাটার্ন, যা স্প্রিং ফ্রেমওয়ার্কের মূল বৈশিষ্ট্যগুলোর মধ্যে একটি। DI-এর মাধ্যমে একটি ক্লাসের নির্ভরশীলতাগুলো (Dependencies) তার বাইরের কোনো উৎস থেকে ইনজেক্ট করা হয়, ফলে কোডটি ডিকাপলড (Decoupled) এবং মডুলার হয়।


DI-এর প্রধান প্রকারভেদ

  1. Constructor Injection: ডিপেনডেন্সি ক্লাসের কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয়।
  2. Setter Injection: ডিপেনডেন্সি Setter মেথডের মাধ্যমে ইনজেক্ট করা হয়।
  3. Field Injection: ডিপেনডেন্সি সরাসরি ফিল্ডে ইনজেক্ট করা হয় (Spring Framework 4.3 বা পরবর্তী সংস্করণে সহজলভ্য)।

উদাহরণ: DI-এর ব্যবহার

Step 1: Maven ডিপেনডেন্সি

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.0</version>
</dependency>

Step 2: Service এবং Repository ক্লাস তৈরি

EmployeeRepository.java

@Component
public class EmployeeRepository {

    public String fetchEmployeeData() {
        return "Employee Data from Database";
    }
}

EmployeeService.java

@Component
public class EmployeeService {

    private final EmployeeRepository employeeRepository;

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

    public void displayEmployeeData() {
        String data = employeeRepository.fetchEmployeeData();
        System.out.println("Service Layer: " + data);
    }
}

Step 3: Configuration Class তৈরি

AppConfig.java

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

Step 4: মেইন ক্লাস

MainApplication.java

public class MainApplication {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

        // DI এর মাধ্যমে EmployeeService Bean পাওয়া
        EmployeeService employeeService = context.getBean(EmployeeService.class);

        employeeService.displayEmployeeData();

        context.close();
    }
}

আউটপুট

Service Layer: Employee Data from Database

DI-এর অন্যান্য পদ্ধতি (Setter এবং Field Injection)

Setter Injection

EmployeeService.java

@Component
public class EmployeeService {

    private EmployeeRepository employeeRepository;

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

    public void displayEmployeeData() {
        String data = employeeRepository.fetchEmployeeData();
        System.out.println("Service Layer: " + data);
    }
}

Field Injection

EmployeeService.java

@Component
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public void displayEmployeeData() {
        String data = employeeRepository.fetchEmployeeData();
        System.out.println("Service Layer: " + data);
    }
}

ব্যাখ্যা

  1. Constructor Injection:
    • এটি Immutable Dependency-এর জন্য সবচেয়ে ভালো পদ্ধতি।
    • ডিপেনডেন্সিগুলো কনস্ট্রাক্টর প্যারামিটার হিসেবে পাস করা হয়।
  2. Setter Injection:
    • Optional Dependency-এর জন্য কার্যকর।
    • Setter মেথডের মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করা হয়।
  3. Field Injection:
    • সবচেয়ে সহজ এবং দ্রুত পদ্ধতি, তবে এটি টেস্টিংয়ে সীমাবদ্ধতা সৃষ্টি করতে পারে।

উপসংহার

স্প্রিং ফ্রেমওয়ার্কে DI একটি গুরুত্বপূর্ণ ফিচার যা কোডের Coupling কমায় এবং রিইউজেবিলিটি বাড়ায়। Constructor Injection সাধারণত সেরা পদ্ধতি হিসেবে বিবেচিত হয়, তবে নির্ভরশীলতার প্রয়োজন অনুযায়ী Setter এবং Field Injectionও ব্যবহৃত হতে পারে।


Content added By
Promotion

Are you sure to start over?

Loading...