Dynamic Beans পপুলেট করা এবং Runtime Bean Creation

Populating Beans (বিন পপুলেশন) - জাভা বীনইউটিলস (Java BeanUtils) - Computer Programming

360

Java Beans সাধারণত একটি ক্লাস হিসেবে তৈরি করা হয় যার প্রপার্টি থাকে, এবং সেগুলির উপর getter/setter মেথড থাকে। তবে কখনও কখনও আপনাকে Dynamic Beans তৈরি এবং runtime-এ beans পপুলেট করতে হতে পারে, যেমন ডায়নামিক ফর্ম ভ্যালিডেশন, ডেটাবেসের ভিন্ন ভিন্ন ইনপুটের জন্য প্রপার্টি তৈরি ইত্যাদি। এই ধরনের পরিস্থিতিতে, BeanUtils এবং Reflection API ব্যবহার করে Runtime Bean Creation এবং Dynamic Beans পপুলেট করা সম্ভব।

চলুন, আমরা দেখব কিভাবে Java Beans ডায়নামিকভাবে তৈরি এবং পপুলেট করা যায়।


১. Dynamic Beans পপুলেট করা

Dynamic Bean Population মানে হচ্ছে runtime-এ Java Bean-এর প্রপার্টি কপি বা পপুলেট করা। আপনি যখন অজানা বা ভেরিয়েবল ডেটার সাথে কাজ করেন, তখন Reflection API বা Apache Commons BeanUtils ব্যবহার করে beans-এর প্রপার্টি পপুলেট করতে পারেন।

উদাহরণ: Dynamic Bean Population using BeanUtils

ধরা যাক, আপনার কাছে একটি Bean রয়েছে এবং আপনি runtime-এ সেই Bean-এর প্রপার্টি পপুলেট করতে চান।

import org.apache.commons.beanutils.BeanUtils;

public class DynamicBeanExample {
    public static void main(String[] args) {
        try {
            // Create a source object with dynamic properties
            Person person = new Person();
            BeanUtils.setProperty(person, "name", "John Doe");
            BeanUtils.setProperty(person, "age", 30);

            // Output the dynamically populated properties
            System.out.println("Name: " + person.getName());  // Output: John Doe
            System.out.println("Age: " + person.getAge());    // Output: 30
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Person {
    private String name;
    private int age;

    // Getter and setter methods
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

ব্যাখ্যা:

  • এখানে BeanUtils.setProperty() মেথড ব্যবহার করা হয়েছে person object-এর প্রপার্টি (যেমন name, age) পপুলেট করতে। এটি ডায়নামিকভাবে runtime-এ প্রপার্টি সেট করে।
  • name এবং age প্রপার্টি গুলি BeanUtils এর মাধ্যমে সেট করা হচ্ছে, যেহেতু এটি runtime-এ এই প্রপার্টিগুলির নাম জানে না।

২. Runtime Bean Creation (ডায়নামিকভাবে Bean তৈরি করা)

Java Bean তৈরি করার প্রক্রিয়া সাধারণত constructor এবং setter/getter মেথডের মাধ্যমে সম্পন্ন হয়। তবে Reflection API ব্যবহার করে আমরা runtime-এ Bean তৈরি করতে পারি। এর মাধ্যমে Java Class ডায়নামিকভাবে লোড এবং ইন্সট্যান্স তৈরি করা সম্ভব হয়।

উদাহরণ: Runtime Bean Creation using Reflection

import java.lang.reflect.Constructor;

public class RuntimeBeanCreationExample {
    public static void main(String[] args) {
        try {
            // Dynamically create Person class object using reflection
            Class<?> personClass = Class.forName("Person");
            Constructor<?> constructor = personClass.getConstructor(String.class, int.class);
            
            // Create a Person object dynamically
            Object person = constructor.newInstance("Alice", 25);

            // Print the dynamically created object data
            System.out.println("Name: " + personClass.getMethod("getName").invoke(person));
            System.out.println("Age: " + personClass.getMethod("getAge").invoke(person));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Person {
    private String name;
    private int age;

    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter methods
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

ব্যাখ্যা:

  1. Reflection API ব্যবহার করে Person ক্লাসের একটি runtime অবজেক্ট তৈরি করা হয়েছে।
  2. Class.forName("Person") দিয়ে Person ক্লাসটি লোড করা হয়েছে এবং getConstructor() দিয়ে constructor পাওয়া গেছে।
  3. newInstance() মেথড ব্যবহার করে runtime-এ Person অবজেক্ট তৈরি করা হয়েছে, এবং getName() এবং getAge() মেথডের মাধ্যমে ডেটা অ্যাক্সেস করা হয়েছে।

Reflection API এর মাধ্যমে আপনি class নাম জানলেও এর constructor এবং method অ্যাক্সেস করতে পারেন এবং runtime-এ object তৈরি করতে পারেন।


৩. Dynamic Beans with Map (Map ব্যবহার করে ডায়নামিক Beans পপুলেট করা)

যখন আপনার কাছে Map অবজেক্ট থাকে এবং আপনি সেই Map থেকে ডায়নামিকভাবে Java Bean পপুলেট করতে চান, তখন আপনি BeanUtils.populate() ব্যবহার করতে পারেন।

উদাহরণ: Map থেকে Bean পপুলেট করা

import org.apache.commons.beanutils.BeanUtils;

import java.util.HashMap;
import java.util.Map;

public class MapToBeanExample {
    public static void main(String[] args) {
        try {
            // Create a map with dynamic properties
            Map<String, String> properties = new HashMap<>();
            properties.put("name", "John");
            properties.put("age", "30");

            // Create a Person object
            Person person = new Person();

            // Populate the Person object with properties from the map
            BeanUtils.populate(person, properties);

            // Output the populated properties
            System.out.println("Name: " + person.getName());  // Output: John
            System.out.println("Age: " + person.getAge());    // Output: 30
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • এখানে একটি Map ব্যবহার করে ডায়নামিকভাবে Person object পপুলেট করা হয়েছে।
  • BeanUtils.populate() মেথড ব্যবহার করে Map এর মান Person ক্লাসের প্রপার্টি name এবং age তে পপুলেট করা হয়েছে।

৪. Dynamic Property Setting using Reflection API

আপনি Reflection API ব্যবহার করে runtime-এ Java Bean এর প্রপার্টি সেট করতে পারেন।

উদাহরণ: Reflection API দিয়ে ডায়নামিক প্রপার্টি সেট করা

import java.lang.reflect.Method;

public class DynamicPropertySettingExample {
    public static void main(String[] args) {
        try {
            // Create a Person object
            Person person = new Person("John", 30);

            // Get the setter method for 'name' property
            Method setNameMethod = person.getClass().getMethod("setName", String.class);
            setNameMethod.invoke(person, "Alice");

            // Output the dynamically set property
            System.out.println("Updated Name: " + person.getName());  // Output: Alice

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • Reflection API ব্যবহার করে Person অবজেক্টের setName() মেথড রিফ্লেক্টিভলি কল করা হয়েছে এবং প্রপার্টি সেট করা হয়েছে।

সারাংশ

  • Dynamic Beans পপুলেট করা: আপনি BeanUtils ব্যবহার করে runtime-এ Java Bean-এর প্রপার্টি কপি এবং পপুলেট করতে পারেন। এটি ডায়নামিক ফর্ম ইনপুট বা ডেটাবেস থেকে প্রাপ্ত ভ্যালু পপুলেট করতে সহায়ক।
  • Runtime Bean Creation: Reflection API ব্যবহার করে আপনি runtime-এ Java Bean তৈরি করতে পারেন, যেখানে Bean-এর constructor এবং methods রিফ্লেক্টিভলি অ্যাক্সেস করা হয়।
  • Map থেকে Bean পপুলেট করা: BeanUtils.populate() ব্যবহার করে আপনি Map থেকে Java Bean পপুলেট করতে পারেন, যা ডায়নামিক ডেটা হ্যান্ডলিং এর জন্য উপযোগী।
Content added || updated By
Promotion

Are you sure to start over?

Loading...