@Component, @Service, এবং @Repository এর ব্যবহার

Spring Boot এর Dependency Injection এবং Beans - স্প্রিং বুট (Spring Boot) - Java Technologies

343

স্প্রিং বুট (Spring Boot) ও স্প্রিং ফ্রেমওয়ার্কে, @Component, @Service, এবং @Repository অ্যানোটেশনগুলো ডিপেনডেন্সি ইনজেকশন (Dependency Injection) এর জন্য ব্যবহৃত হয়। এগুলো স্প্রিং কন্টেইনারে ক্লাসকে একটি বিইন (bean) হিসেবে চিহ্নিত করে, যাতে স্প্রিং কন্টেইনার ঐ ক্লাসের একটি ইনস্ট্যান্স তৈরি করে এবং প্রয়োজনীয় স্থানে ইনজেক্ট করতে পারে। যদিও এই তিনটি অ্যানোটেশন একই কাজ করে, তবে তাদের মধ্যে কিছু পার্থক্য রয়েছে, যেগুলো সঠিকভাবে ব্যবহার করলে স্প্রিং অ্যাপ্লিকেশনের কাঠামো আরও পরিষ্কার এবং সংগঠিত হয়।


@Component

@Component হল স্প্রিং ফ্রেমওয়ার্কের একটি সাধারণ অ্যানোটেশন যা কোনো ক্লাসকে একটি স্প্রিং বিইন (Spring Bean) হিসেবে চিহ্নিত করে। এটি ক্লাসের জন্য কোনো নির্দিষ্ট ভূমিকা নির্ধারণ করে না, শুধুমাত্র স্প্রিং কন্টেইনারকে জানায় যে এটি একটি বিইন হতে পারে। অন্য সব অ্যানোটেশন যেমন @Service এবং @Repository আসলে @Component এর বিশেষায়িত ফর্ম, যেগুলো নির্দিষ্ট ধরণের বিইনের জন্য ব্যবহৃত হয়।

উদাহরণ:

import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

এখানে, MyComponent ক্লাসটি @Component অ্যানোটেশনের মাধ্যমে স্প্রিং কন্টেইনারে একটি বিইন হিসেবে চিহ্নিত হয়েছে এবং যেখানে প্রয়োজন সেখানে এটি ইনজেক্ট করা যাবে।


@Service

@Service অ্যানোটেশনটি মূলত সার্ভিস লেয়ারের জন্য ব্যবহৃত হয়, যেখানে ব্যবসায়িক (business) লজিক বা বাণিজ্যিক কাজ করা হয়। যদিও @Service ক্লাসের কার্যক্রম @Component এর মতোই, এটি সাধারণত পরিষ্কারভাবে সার্ভিস লেয়ারকে চিহ্নিত করতে ব্যবহৃত হয়। এটি স্প্রিং কন্টেইনারের কাছে আরও স্পষ্টভাবে বলে দেয় যে এটি ব্যবসায়িক লজিক সম্পর্কিত একটি বিইন।

উদাহরণ:

import org.springframework.stereotype.Service;

@Service
public class MyService {
    public String processData(String data) {
        return "Processed: " + data;
    }
}

এখানে, MyService ক্লাসটি একটি ব্যবসায়িক লজিকের ক্লাস, যা @Service অ্যানোটেশন দিয়ে চিহ্নিত করা হয়েছে। স্প্রিং কন্টেইনারে এটি একটি সার্ভিস বিইন হিসেবে ব্যবহৃত হবে।


@Repository

@Repository অ্যানোটেশনটি সাধারণত ডেটাবেস অপারেশন পরিচালনার জন্য ব্যবহৃত হয়। এটি সাধারণত ডেটা অ্যাক্সেস লেয়ারের জন্য ব্যবহৃত হয় এবং স্প্রিং ডেটা বা JPA রেপোজিটরি ক্লাসগুলির জন্য উপযুক্ত। @Repository অ্যানোটেশনটি কিছু অতিরিক্ত ফিচার প্রদান করে, যেমন ডেটাবেস এক্সসেপশনকে স্প্রিংয়ের ডেটাবেস সম্পর্কিত এক্সসেপশন হ্যান্ডলিং এর মাধ্যমে কনভার্ট করা (convert) এবং অ্যাসিস্ট করা।

উদাহরণ:

import org.springframework.stereotype.Repository;

@Repository
public class MyRepository {
    public String getDataFromDatabase() {
        // Example database access logic
        return "Data from database";
    }
}

এখানে, MyRepository ক্লাসটি ডেটাবেস থেকে তথ্য প্রাপ্তির জন্য ব্যবহৃত হচ্ছে এবং এটি @Repository অ্যানোটেশনের মাধ্যমে স্প্রিং কন্টেইনারে একটি রেপোজিটরি বিইন হিসেবে চিহ্নিত করা হয়েছে।


@Component, @Service, @Repository এর পার্থক্য

  • @Component: এটি একটি সাধারণ অ্যানোটেশন যা কোনো ক্লাসকে স্প্রিং কন্টেইনারে একটি বিইন হিসেবে চিহ্নিত করে। এটি সাধারণ ব্যবহারের জন্য এবং কোনো বিশেষ ধরনের ক্লাসের জন্য নির্ধারিত নয়।
  • @Service: এটি বিশেষভাবে সার্ভিস লেয়ার বা ব্যবসায়িক লজিক সম্পর্কিত ক্লাসের জন্য ব্যবহৃত হয়। এটি সাধারণত @Component এর বিশেষায়িত ফর্ম, যেখানে ক্লাসটির ভূমিকা পরিষ্কারভাবে ব্যবসায়িক লজিকের ক্লাস।
  • @Repository: এটি ডেটা অ্যাক্সেস লেয়ারের জন্য ব্যবহৃত হয় এবং এটি ডেটাবেস এক্সসেপশন হ্যান্ডলিং এবং অন্যান্য ডেটাবেস সম্পর্কিত কার্যক্রমের জন্য উপযোগী। এটি @Component এর বিশেষায়িত ফর্ম, কিন্তু ডেটাবেস সংক্রান্ত কার্যক্রমের জন্য অতিরিক্ত সুবিধা প্রদান করে।

সারাংশ

স্প্রিং বুটে @Component, @Service, এবং @Repository অ্যানোটেশনগুলো মূলত একই কাজ করে, কিন্তু তাদের ব্যবহারের ক্ষেত্রে নির্দিষ্ট পার্থক্য রয়েছে। @Component সাধারণ বিইন তৈরি করতে ব্যবহৃত হয়, @Service ব্যবসায়িক লজিকের জন্য এবং @Repository ডেটাবেস বা ডেটা অ্যাক্সেস লেয়ারের জন্য ব্যবহৃত হয়। এই অ্যানোটেশনগুলির সাহায্যে স্প্রিং কন্টেইনারে ডিপেনডেন্সি ইনজেকশন এবং বিইন ম্যানেজমেন্ট কার্যক্রম আরও সংগঠিত এবং পরিষ্কারভাবে পরিচালিত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...