Spring Bean কি এবং Bean Lifecycle

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

369

স্প্রিং ফ্রেমওয়ার্ক একটি শক্তিশালী এবং জনপ্রিয় Java ফ্রেমওয়ার্ক, যা অ্যাপ্লিকেশন ডেভেলপমেন্টে অনেক সুবিধা প্রদান করে। স্প্রিং ফ্রেমওয়ার্কের মূল ধারণাগুলির মধ্যে একটি হল Bean। স্প্রিং Bean এবং এর Lifecycle বুঝতে পারলে স্প্রিং অ্যাপ্লিকেশন ডেভেলপমেন্ট আরও কার্যকরী এবং নিয়ন্ত্রিত হয়।

Spring Bean কি?

স্প্রিং ফ্রেমওয়ার্কে, Bean হল একটি অবজেক্ট যা স্প্রিং কনটেইনার (ApplicationContext বা BeanFactory) দ্বারা তৈরি, কনফিগার এবং ম্যানেজ করা হয়। স্প্রিং Bean হল সেই সমস্ত ক্লাস বা অবজেক্ট, যেগুলো স্প্রিং কনটেইনারের মাধ্যমে ইনস্ট্যান্সিয়েটেড, কনফিগার এবং ম্যানেজ করা হয়। স্প্রিং কনটেইনার একটি IoC (Inversion of Control) কনটেইনার, যা ডিপেন্ডেন্সি ইনজেকশন (DI) পরিচালনা করে এবং অবজেক্টের লাইফ সাইকেল পরিচালনা করে।

স্প্রিং Bean সাধারণত নিম্নলিখিতভাবে কনফিগার করা হয়:

  1. XML Configuration: XML কনফিগারেশন ফাইলে <bean> ট্যাগ ব্যবহার করে Bean কনফিগার করা হয়।
  2. Java Configuration: @Bean অ্যানোটেশন ব্যবহার করে Java ক্লাসে Bean কনফিগার করা হয়।
  3. Annotation-based Configuration: @Component, @Service, @Repository, @Controller অ্যানোটেশন ব্যবহার করে Bean কনফিগার করা হয়।

উদাহরণ:

@Component
public class EmployeeService {
    public void addEmployee() {
        System.out.println("Employee added!");
    }
}

এখানে, EmployeeService ক্লাসটি একটি স্প্রিং Bean হিসেবে কনফিগার করা হয়েছে, কারণ এটি @Component অ্যানোটেশন ব্যবহার করেছে। স্প্রিং কনটেইনার এই Bean কে নিজেই ইনস্ট্যান্সিয়েট করবে এবং ব্যবহারের জন্য প্রস্তুত রাখবে।


Spring Bean Lifecycle

স্প্রিং Bean এর Lifecycle হল একটি Bean এর সৃষ্টি থেকে ধ্বংস হওয়া পর্যন্ত যে সমস্ত পর্যায় অতিক্রম করে, তা বোঝানোর প্রক্রিয়া। স্প্রিং কনটেইনার একটি Bean এর lifecycle নিয়ন্ত্রণ করে, যাতে Bean এর অবস্থা পর্যায়ক্রমে পরিবর্তিত হয়।

স্প্রিং Bean Lifecycle এর গুরুত্বপূর্ণ পর্যায়গুলি হল:

  1. Bean Creation: প্রথমে স্প্রিং কনটেইনার Bean এর একটি ইনস্ট্যান্স তৈরি করে। এটি @Component, @Service, @Repository, @Controller অ্যানোটেশন বা XML কনফিগারেশন দ্বারা নির্ধারিত হয়।
  2. Dependency Injection (DI): স্প্রিং কনটেইনার Bean এর ইনস্ট্যান্স তৈরি করার পর, এতে নির্দিষ্ট ডিপেন্ডেন্সি ইনজেক্ট করে। যেমন অন্য কোন Bean এর ইনস্ট্যান্স বা কনফিগারেশন ভ্যালু।
  3. Post-Initialization: এই পর্যায়ে Bean এর ইনিশিয়ালাইজেশনের পর কিছু অতিরিক্ত কাজ করা হয়। স্প্রিং @PostConstruct অ্যানোটেশন বা InitializingBean ইন্টারফেসের মাধ্যমে এই কাজগুলো করে থাকে।
  4. Bean Destruction: Bean যখন আর প্রয়োজনীয় থাকে না (অথবা অ্যাপ্লিকেশন বন্ধ হয়ে যায়), তখন স্প্রিং কনটেইনার সেই Bean ধ্বংস করে। এটি @PreDestroy অ্যানোটেশন বা DisposableBean ইন্টারফেসের মাধ্যমে করা হয়।

Spring Bean Lifecycle স্টেপ-by-স্টেপ

  1. Bean Instantiation: স্প্রিং কনটেইনার Bean এর একটি নতুন ইনস্ট্যান্স তৈরি করে। এটি সাধারণত Constructor-based Dependency Injection বা Setter-based Dependency Injection ব্যবহার করে করা হয়।
  2. Dependency Injection: যদি Bean-এ কোন ডিপেন্ডেন্সি থাকে (যেমন অন্য Bean), তাহলে স্প্রিং কনটেইনার সেই ডিপেন্ডেন্সিগুলো Bean এ ইনজেক্ট করে।
  3. Post-Initialization (optional):
    • যদি Bean এ কোনো @PostConstruct অ্যানোটেশন থাকে, তখন সেই মেথডটি কল করা হয়।
    • এছাড়া, আপনি InitializingBean ইন্টারফেসও ব্যবহার করতে পারেন যেখানে afterPropertiesSet() মেথডটি কল করা হবে।
  4. Bean is Ready to Use: এখন Bean পুরোপুরি ইনস্ট্যান্সিয়েটেড এবং কনফিগারড, এটি অ্যাপ্লিকেশন দ্বারা ব্যবহারযোগ্য।
  5. Pre-Destroy (optional):
    • যখন Bean ধ্বংসের জন্য প্রস্তুত, তখন @PreDestroy অ্যানোটেশন বা DisposableBean ইন্টারফেসের মাধ্যমে ধ্বংসের জন্য নির্দিষ্ট মেথড কল করা হয়।
    • destroy-method কনফিগারেশন বা @PreDestroy অ্যানোটেশন ব্যবহার করা যেতে পারে।
  6. Bean Destruction: স্প্রিং কনটেইনার Bean ধ্বংস করে এবং সম্পূর্ণ রিসোর্স মুক্ত করে দেয়।

Spring Bean Lifecycle Example

Step 1: Bean with Initialization and Destruction Methods

@Component
public class EmployeeService implements InitializingBean, DisposableBean {

    public void addEmployee() {
        System.out.println("Employee added!");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("EmployeeService Bean initialized!");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("EmployeeService Bean destroyed!");
    }
}

Step 2: Configuration Class

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

Step 3: Main Application

public class MainApplication {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = 
            new AnnotationConfigApplicationContext(AppConfig.class);
        
        // Retrieve Bean from the context
        EmployeeService employeeService = context.getBean(EmployeeService.class);
        
        // Use the Bean
        employeeService.addEmployee();
        
        // Close context to trigger destruction
        context.close();
    }
}

Output:

EmployeeService Bean initialized!
Employee added!
EmployeeService Bean destroyed!

এখানে, afterPropertiesSet() এবং destroy() মেথডগুলি Bean এর লাইফসাইকেলের মধ্যে ইনিশিয়ালাইজেশন এবং ধ্বংসের সময় কার্যকর হয়েছে।


Spring Bean Lifecycle with Annotations

স্প্রিং Bean এর ইনিশিয়ালাইজেশন এবং ধ্বংস প্রক্রিয়া সহজ করার জন্য @PostConstruct এবং @PreDestroy অ্যানোটেশন ব্যবহার করা যায়।

উদাহরণ:

@Component
public class EmployeeService {

    public void addEmployee() {
        System.out.println("Employee added!");
    }

    @PostConstruct
    public void init() {
        System.out.println("EmployeeService Bean initialized!");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("EmployeeService Bean destroyed!");
    }
}

এখানে, @PostConstruct এবং @PreDestroy অ্যানোটেশনগুলো Bean এর লাইফসাইকেলের ইনিশিয়ালাইজেশন এবং ধ্বংস পর্যায়ে কার্যকর হবে।


Bean Scopes

স্প্রিং Bean-এর লাইফসাইকেল বিভিন্ন স্কোপে পরিচালিত হতে পারে। স্প্রিং ফ্রেমওয়ার্কে প্রধানত পাঁচটি Bean Scope থাকে:

  1. Singleton: এটি ডিফল্ট স্কোপ, যেখানে একমাত্র একটি Bean ইনস্ট্যান্স কনটেইনারে থাকে এবং পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।
  2. Prototype: প্রতিবার নতুন Bean ইনস্ট্যান্স তৈরি হয়।
  3. Request: HTTP রিকোয়েস্টের জন্য একটি Bean ইনস্ট্যান্স তৈরি হয়।
  4. Session: HTTP সেশন অনুসারে Bean তৈরি হয়।
  5. Application: অ্যাপ্লিকেশন লাইফসাইকেল চলাকালীন একটি Bean ইনস্ট্যান্স থাকে।
@Bean
@Scope("singleton")  // or "prototype", "request", "session", "application"
public EmployeeService employeeService() {
    return new EmployeeService();
}

উপসংহার

স্প্রিং Bean এবং Bean Lifecycle স্প্রিং কনটেইনারের দ্বারা পরিচালিত হয় এবং এটি কোডের কার্যকারিতা এবং রক্ষণাবেক্ষণ সহজ করতে সহায়তা করে। স্প্রিং Bean এর লাইফসাইকেল সম্পর্কে জানলে আপনি স্প্রিং এর উপর নির্ভরশীল অ্যাপ্লিকেশনকে আরো দক্ষতার সাথে কনফিগার এবং ম্যানেজ করতে পারবেন। Bean Lifecycle এর অন্তর্গত Initialization, Dependency Injection, Post-Initialization, এবং Destruction পর্যায়গুলো নিশ্চিত করে যে, Bean তার নির্দিষ্ট কাজ সঠিকভাবে করবে এবং কনটেইনারে তার প্রয়োজনীয় রিসোর্স মুক্ত হবে।

Content added By
Promotion

Are you sure to start over?

Loading...