Dependency Injection in a Spring Project

Learn Dependency Injection process in a spring project

শুরু করার আগে জেনে নিই Dependency Injection কী… আপনার কাছে মনে হতে পারে এখানে ইঞ্জেকশান কথা থেকে আসলো !!! ঘাবড়ানোরও কিছু নাই, ডাক্তার এর কাজ নয় এটা । আপনার প্রোজেক্টটি কোন কোন বিষয়ের উপর নির্ভর করে সেটাই Dependency… Dependency Injection একটি সফ্টওয়্যার নকশা প্যাটার্ন যা নির্ভরশীলতা সমাধান করার জন্য নিয়ন্ত্রণের বক্রতা (inversion of control) প্রয়োগ করে। একটি ইনজেকশন হল একটি নির্ভরশীল object এর Dependency পাস করা যা এটি ব্যবহার করবে। DI একটি প্রক্রিয়া যেখানে বস্তু তাদের নির্ভরতা সংজ্ঞায়িত করে। আশা করি বেপারটা বুঝতে পেরেছেন। চলুন তাহলে অনুশীলন করে আরও বুঝে নিই ।

Image result for spring dependency

এখানে একটা ডেমো দিলাম যেখানে XML (extensible Markup Language) এর মাধ্যমে দেখানো হয়েছে কীভাবে DI কাজ করে।

ক্লায়েন্ট অবজেক্টটি অন্তত তিনটি উপায়ে বাহ্যিক মডিউলের একটি রেফারেন্স পেতে পারে: কন্সট্রাকটর ইনজেকশন: নির্ভরতাগুলি ক্লায়েন্টের ক্লাস কনস্ট্রাক্টর দ্বারা সরবরাহ করা হয়। সেট্টার ইনজেকশন: ক্লায়েন্ট নির্ভরতা ইনজেকশনের জন্য ইনজেক্টর ব্যবহার করে একটি সেট্টার পদ্ধতি প্রকাশ করে।

Dependency injection involves four roles:

  • the service object(s) to be used
  • the client object that is depending on the service(s) it uses
  • the interfaces that define how the client may use the services
  • the injector, which is responsible for constructing the services and injecting them into the client

There are at least three ways a client object can receive a reference to an external module:

  • Constructor injection: the dependencies are provided through a client’s class constructor.
  • Setter injection: the client exposes a setter method that the injector uses to inject the dependency.
  • Interface injection: the dependency’s interface provides an injector method that will inject the dependency into any client passed to it. Clients must implement an interface that exposes a setter method that accepts the dependency.

Constructor injection

This method requires the client to provide a parameter in a constructor for the dependency.

// Constructor
Client(Service service) {
    // Save the reference to the passed-in service inside this client
    this.service = service;
}

Setter injection

This method requires the client to provide a setter method for the dependency.

// Setter method
public void setService(Service service) {
    // Save the reference to the passed-in service inside this client.
    this.service = service;
}

Interface injection

This is simply the client publishing a role interface to the setter methods of the client’s dependencies. It can be used to establish how the injector should talk to the client when injecting dependencies.

// Service setter interface.
public interface ServiceSetter {
    public void setService(Service service);
}

// Client class
public class Client implements ServiceSetter {
    // Internal reference to the service used by this client.
    private Service service;

    // Set the service that this client is to use.
    @Override
    public void setService(Service service) {
        this.service = service;
    }
}

Manually assembling in main by hand is one way of implementing dependency injection.

public class Injector {
    public static void main(String[] args) {
        // Build the dependencies first
        Service service = new ExampleService();

        // Inject the service, constructor style
        Client client = new Client(service);

        // Use the objects
        System.out.println(client.greet());
    }	
}

Spring Boot এ কাজ করতে গেলে আমরা pom.xml file এ আমাদের প্রয়োজনীয় Dependency অ্যাড করতে পারি... নতুবা ডেস্কটপ অ্যাপ/ নরমাল জাভা 
মাভেন অ্যাপ এর জন্য Bean Configuration File ব্যবহার করে থাকি... এখন চলুন ভিডিও দেখে বুুুুঝে নিই... 

Video Link : https://youtu.be/au5xpOsaIOs

You can share with your friends and put comments regarding your views.Thank you...
Stay connected for the next lesson, until then Allah Hafej...

N.B. Perform your Salah on time and tell your family also. May Allah bless you...

Leave a Reply

Your email address will not be published. Required fields are marked *