Skill

SpEL সিনট্যাক্স এবং বেসিক কনসেপ্ট

স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (Spring Expression Language) - Java Technologies

344

Spring Expression Language (SpEL) হলো একটি শক্তিশালী ভাষা যা Spring Framework-এর অংশ হিসেবে ব্যবহৃত হয় এবং Java অ্যাপ্লিকেশনগুলিতে ডাইনামিক এক্সপ্রেশন মূল্যায়ন করার জন্য ব্যবহৃত হয়। এটি XML কনফিগারেশন, অ্যানোটেশন, এবং Spring এর অন্যান্য বৈশিষ্ট্যগুলোতে ডাইনামিক তথ্য প্রাপ্তির জন্য ব্যবহার করা হয়।

SpEL মূলত JavaBeans প্রপার্টি অ্যাক্সেস, পদ্ধতি কল, আর্কিটেকচারাল কনস্ট্রাক্টে (যেমন লিস্ট, ম্যাপ) কাজ করার জন্য ব্যবহৃত হয় এবং এটি Spring IoC কন্টেইনারের মধ্যে অবজেক্টের মধ্যে ডাইনামিক অ্যাক্সেস সুনিশ্চিত করে।


SpEL সিনট্যাক্স

SpEL এক্সপ্রেশন সাধারণত নিম্নলিখিত সিনট্যাক্স অনুসরণ করে:

#{expression}

এটি সাধারণত Spring কনফিগারেশন ফাইল, অ্যানোটেশন অথবা কোডে ব্যবহৃত হয় যেখানে SpEL এক্সপ্রেশন প্রয়োগ করা হয়। এখানে #{} ব্লকের মধ্যে থাকা অংশটি একটি এক্সপ্রেশন যা Spring কনটেইনারে রেজলভ করা হয়।


SpEL এর বেসিক কনসেপ্ট

SpEL-এর কিছু গুরুত্বপূর্ণ কনসেপ্ট রয়েছে যা JavaBeans, প্রপার্টি অ্যাক্সেস, আর্কিটেকচারাল কনস্ট্রাক্টস ইত্যাদির সাথে কাজ করতে সহায়তা করে:

  1. অবজেক্ট প্রপার্টি এক্সপ্রেশন: SpEL ব্যবহার করে একটি অবজেক্টের প্রপার্টি অ্যাক্সেস করা সম্ভব।

    #{employee.name}
    

    এখানে employee একটি অবজেক্ট এবং name তার প্রপার্টি।

  2. মেথড কল: SpEL ব্যবহার করে একটি অবজেক্টের মেথড কল করা সম্ভব।

    #{employee.getName()}
    

    এটি employee অবজেক্টের getName() মেথড কল করবে।

  3. প্যারামিটারাইজড মেথড কল: SpEL এ প্যারামিটার সহ মেথড কল করতে পারেন।

    #{employee.getFullName('John', 'Doe')}
    
  4. অপারেটরস: SpEL-এর মধ্যে অপারেটরগুলি ব্যবহার করে গাণিতিক, তুলনা, লজিক্যাল অপারেশন করা যায়। যেমন:

    • গাণিতিক অপারেটর: +, -, *, /, %
    • তুলনা অপারেটর: ==, !=, <, >, <=, >=
    • লজিক্যাল অপারেটর: and, or, not

    উদাহরণ:

    #{2 + 2}
    
  5. লিস্ট এবং ম্যাপ অ্যাক্সেস: SpEL ব্যবহার করে লিস্ট ও ম্যাপের এলিমেন্ট অ্যাক্সেস করতে পারেন।

    #{list[0]}
    #{map['key']}
    
  6. কন্ডিশনাল এক্সপ্রেশন: SpEL এ কন্ডিশনাল লজিকও প্রয়োগ করা যায়, যেমন if-else:

    #{(employee.salary > 50000) ? 'High Salary' : 'Low Salary'}
    

SpEL উদাহরণ

  1. স্প্রিং কনফিগারেশন ফাইলে SpEL ব্যবহার:
<bean id="employee" class="com.example.Employee">
    <property name="name" value="John Doe"/>
    <property name="salary" value="#{100000}"/>
</bean>

<bean id="employeeService" class="com.example.EmployeeService">
    <property name="employee" value="#{employee}"/>
</bean>
  1. অ্যানোটেশন-এ SpEL ব্যবহার:
@Component
public class Employee {
    private String name;

    @Value("#{systemProperties['user.name']}")
    private String userName;

    // Getters এবং Setters
}
  1. SpEL দিয়ে আর্কিটেকচারাল কনস্ট্রাক্ট অ্যাক্সেস:
@Value("#{myList[0]}")
private String firstElement;

@Value("#{myMap['key']}")
private String mapValue;

SpEL এর অন্যান্য বৈশিষ্ট্য

  1. ফাংশন ব্যবহার: SpEL ব্যবহার করে Spring কনটেইনারে রেজিস্টারকৃত ফাংশন কল করা যায়।

    #{T(Math).PI}
    
  2. সুবিধাজনক লজিক্যাল ফিচার: SpEL ডেটা তুলনা বা ম্যানিপুলেশন করার জন্য লজিক্যাল অপারেটর এবং কন্ডিশনাল স্টেটমেন্ট সমর্থন করে।

SpEL এর সুবিধা

  1. ডাইনামিক কনফিগারেশন: SpEL ব্যবহার করে Spring কনফিগারেশন ফাইলে ডাইনামিক তথ্য ইনজেক্ট করা যায়।
  2. কোডের মধ্যে প্রপার্টি অ্যাক্সেস: Spring কনটেইনারে প্রপার্টি অ্যাক্সেস এবং মেথড কল সহজ হয়ে যায়।
  3. কমপ্লেক্স এক্সপ্রেশন ইভ্যালুয়েশন: SpEL একটি খুব শক্তিশালী ভাষা, যা জটিল এক্সপ্রেশন ও কন্ডিশনাল লজিক সমর্থন করে।

Spring Expression Language (SpEL) একটি অত্যন্ত শক্তিশালী টুল যা Spring অ্যাপ্লিকেশনগুলির মধ্যে ডাইনামিক তথ্য প্রাপ্তি, প্রপার্টি অ্যাক্সেস, এবং মেথড কলের জন্য ব্যবহৃত হয়। SpEL এর সাহায্যে কোডের মধ্যে ডাইনামিক কনফিগারেশন এবং লজিক প্রয়োগ সম্ভব, যা অ্যাপ্লিকেশনটির নমনীয়তা এবং কার্যকারিতা বৃদ্ধি করে।


Content added By

স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (Spring Expression Language - SpEL) হল একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা স্প্রিং ফ্রেমওয়ার্কের মধ্যে বিভিন্ন কনফিগারেশন এবং ডেটা এক্সপ্রেশন ব্যবহারের জন্য ব্যবহৃত হয়। এটি ডাইনামিক এক্সপ্রেশন প্রক্রিয়াকরণের জন্য স্প্রিং কনটেইনারে ব্যবহৃত হয় এবং এতে অবজেক্ট প্রোপার্টি অ্যাক্সেস, ফাংশন কল, কন্ডিশনাল এক্সপ্রেশন ইত্যাদি অন্তর্ভুক্ত রয়েছে।


SpEL এর মৌলিক সিনট্যাক্স

SpEL এর সঠিক ব্যবহার বুঝতে হলে কিছু মৌলিক সিনট্যাক্স এবং ধারণা জানা গুরুত্বপূর্ণ।

১. এক্সপ্রেশন সন্নিবেশ (Expression Insertion)

SpEL এক্সপ্রেশন সাধারণত ${} ব্রেসেস এর মধ্যে লেখা হয়।

${expression}

উদাহরণ

@Value("#{2 * 3}")
private int result;  // result = 6

এখানে 2 * 3 একটি SpEL এক্সপ্রেশন এবং এটি 6 হিসাবে রেজাল্ট প্রদান করবে।


২. অবজেক্ট প্রোপার্টি অ্যাক্সেস (Object Property Access)

SpEL ব্যবহার করে একটি অবজেক্টের প্রোপার্টি অ্যাক্সেস করা যায়। এর জন্য . ডট অপারেটর ব্যবহার করা হয়।

${person.name}

উদাহরণ

public class Person {
    private String name;
    private int age;

    // Getter and Setter
}
@Value("#{person.name}")
private String personName;

এখানে, person.name SpEL এক্সপ্রেশনটি Person অবজেক্টের name প্রোপার্টির মান পাবে।


৩. ফাংশন কল (Function Call)

SpEL এ ফাংশন কল করা যায়। এর জন্য # সিম্বল ব্যবহার করা হয়, যা স্প্রিং কনটেইনারে থাকা একটি ফাংশনকে কল করে।

#{T(java.lang.Math).random()}

উদাহরণ

@Value("#{T(java.lang.Math).random()}")
private double randomValue;

এখানে, T(java.lang.Math).random() SpEL এক্সপ্রেশনটি Math.random() ফাংশন কল করে এবং একটি র্যান্ডম ভ্যালু প্রদান করে।


৪. কন্ডিশনাল এক্সপ্রেশন (Conditional Expression)

SpEL এ কন্ডিশনাল এক্সপ্রেশন বা শর্তসাপেক্ষ এক্সপ্রেশনও ব্যবহার করা যায়, যেটি ?: অপারেটর ব্যবহার করে লেখা হয়।

${condition ? 'trueValue' : 'falseValue'}

উদাহরণ

@Value("#{2 > 1 ? 'True' : 'False'}")
private String result;

এখানে, 2 > 1 শর্তটি সত্য হলে True এবং মিথ্যা হলে False রিটার্ন করবে।


৫. লিস্ট বা অ্যারের উপাদান অ্যাক্সেস (Accessing List or Array Elements)

SpEL এর মাধ্যমে একটি List বা Array এর নির্দিষ্ট উপাদানও অ্যাক্সেস করা যায়।

${list[0]}  // First element of the list

উদাহরণ

@Value("#{list[0]}")
private String firstElement;

এখানে, list[0] প্রথম উপাদানটি অ্যাক্সেস করবে যা তালিকার প্রথম আইটেমের মান।


৬. মেথড কল (Method Call)

SpEL এ অবজেক্টের মেথডও কল করা যায়। মেথড কলের জন্য () ব্যবহার করা হয়।

${person.getName()}

উদাহরণ

@Value("#{person.getName()}")
private String personName;

এখানে, person.getName() মেথড কল করে Person অবজেক্টের নাম রিটার্ন করবে।


৭. স্প্রিং কনটেইনারের রেফারেন্স (Spring Bean References)

SpEL স্প্রিং কনটেইনারের মধ্যে অবস্থিত Beans রেফারেন্স করার জন্য @{} ব্যবহার করা হয়।

@Value("#{myBean.someProperty}")
private String property;

উদাহরণ

@Component
public class MyBean {
    private String name = "SpEL Example";
    
    public String getName() {
        return name;
    }
}
@Value("#{myBean.name}")
private String beanName;

এখানে, SpEL myBean.name ব্যবহার করে MyBean ক্লাসের name প্রোপার্টি রিটার্ন করবে।


৮. গণনা এবং গাণিতিক অপারেশন (Mathematical Operations)

SpEL গাণিতিক অপারেশন যেমন যোগফল, বিয়োগ, গুণফল ইত্যাদি সমর্থন করে।

#{5 + 10}

উদাহরণ

@Value("#{5 + 10}")
private int sum;

এখানে, 5 + 10 SpEL এক্সপ্রেশনটি 15 রিটার্ন করবে।


উপসংহার

SpEL একটি শক্তিশালী টুল যা স্প্রিং কনফিগারেশন এবং ডাইনামিক এক্সপ্রেশন প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। বেসিক সিনট্যাক্স হিসেবে এটি অবজেক্ট প্রোপার্টি অ্যাক্সেস, কন্ডিশনাল এক্সপ্রেশন, ফাংশন কল, লিস্ট/অ্যারে অ্যাক্সেস এবং গাণিতিক অপারেশনসহ আরো অনেক কিছু সমর্থন করে। SpEL এর সাহায্যে স্প্রিং অ্যাপ্লিকেশনকে আরও ডাইনামিক এবং কনফিগারেবল করা যায়।


Content added By

Spring Expression Language (SpEL) একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Spring ফ্রেমওয়ার্কে বিভিন্ন ডেটা এক্সপ্রেশন এবং অপারেশন পরিচালনার জন্য ব্যবহৃত হয়। এটি Spring অ্যাপ্লিকেশন কনটেক্সটের মধ্যে অবজেক্ট, প্রপার্টি, মেথড, লিস্ট, ম্যাপ ইত্যাদি অ্যাক্সেস এবং ম্যানিপুলেট করার জন্য ব্যবহার করা হয়। SpEL-এর মাধ্যমে Java Beans-এর প্রপার্টি অ্যাক্সেস, কন্ডিশনাল স্টেটমেন্ট, লুপ, মেথড ইনভোকেশন ইত্যাদি করা সম্ভব।


SpEL এক্সপ্রেশন

SpEL এক্সপ্রেশনগুলো বিভিন্ন ধরণের হতে পারে যেমন Literal Expressions, Property Access, এবং Method Invocation। নিচে এই প্রতিটি এক্সপ্রেশন কীভাবে ব্যবহার করা যায় তা বিস্তারিতভাবে আলোচনা করা হয়েছে।


1. Literal Expressions

Literal Expressions হলো সরাসরি নির্দিষ্ট মান (string, number, boolean ইত্যাদি) যা SpEL এক্সপ্রেশন হিসাবে ব্যবহার করা হয়।

উদাহরণ:

ExpressionParser parser = new SpelExpressionParser();

// String Literal
Expression exp1 = parser.parseExpression("'Hello, SpEL!'");
String result1 = (String) exp1.getValue();
System.out.println(result1); // Output: Hello, SpEL!

// Integer Literal
Expression exp2 = parser.parseExpression("100");
int result2 = (Integer) exp2.getValue();
System.out.println(result2); // Output: 100

// Boolean Literal
Expression exp3 = parser.parseExpression("true");
boolean result3 = (Boolean) exp3.getValue();
System.out.println(result3); // Output: true

2. Property Access

Property Access এর মাধ্যমে SpEL একটি অবজেক্টের প্রপার্টি অ্যাক্সেস করতে সক্ষম। এটি getter মেথড বা public field ব্যবহার করে ডেটা রিট্রিভ বা সেট করতে পারে।

উদাহরণ:

public 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;
    }
}

ExpressionParser parser = new SpelExpressionParser();
Person person = new Person("John", 30);

// Accessing property 'name'
Expression exp1 = parser.parseExpression("name");
String name = (String) exp1.getValue(person);
System.out.println(name); // Output: John

// Accessing property 'age'
Expression exp2 = parser.parseExpression("age");
int age = (Integer) exp2.getValue(person);
System.out.println(age); // Output: 30

এছাড়া, setter মেথড ব্যবহার করে প্রপার্টি সেটও করা যেতে পারে:

// Setting property 'name'
Expression exp3 = parser.parseExpression("name");
exp3.setValue(person, "Alice");
System.out.println(person.getName()); // Output: Alice

3. Method Invocation

SpEL-এ Method Invocation ব্যবহার করে অবজেক্টের মেথড কল করা যেতে পারে। এটি প্যারামিটার সহ মেথড কল করতে পারে এবং মেথডের রিটার্ন ভ্যালু ফেরত দিতে পারে।

উদাহরণ:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public int subtract(int a, int b) {
        return a - b;
    }
}

ExpressionParser parser = new SpelExpressionParser();
Calculator calculator = new Calculator();

// Invoking method 'add'
Expression exp1 = parser.parseExpression("add(10, 20)");
int result1 = (Integer) exp1.getValue(calculator);
System.out.println(result1); // Output: 30

// Invoking method 'subtract'
Expression exp2 = parser.parseExpression("subtract(50, 20)");
int result2 = (Integer) exp2.getValue(calculator);
System.out.println(result2); // Output: 30

এছাড়া, Static Methods এবং Constructor Invocationও SpEL ব্যবহার করে করা সম্ভব।

Static Method Example:

public class MathUtils {
    public static int multiply(int a, int b) {
        return a * b;
    }
}

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("T(com.example.MathUtils).multiply(5, 3)");
int result = (Integer) exp.getValue();
System.out.println(result); // Output: 15

সারাংশ

SpEL (Spring Expression Language) Spring ফ্রেমওয়ার্কের একটি শক্তিশালী উপাদান যা অবজেক্টের প্রপার্টি অ্যাক্সেস, মেথড কল, কন্ডিশনাল এক্সপ্রেশন, এবং আরও অনেক কিছু সহজভাবে পরিচালনা করতে সাহায্য করে। Literal Expressions, Property Access, এবং Method Invocation হল SpEL-এর প্রধান এক্সপ্রেশন ধরনের যা বিভিন্ন পরিস্থিতিতে অত্যন্ত কার্যকরী। SpEL এর মাধ্যমে Java Beans-এর প্রপার্টি এবং মেথডের ওপর কাজ করতে সহজভাবে কোড লেখা সম্ভব।

Content added By

Spring Expression Language (SpEL) একটি শক্তিশালী ইভ্যালুয়েশন এক্সপ্রেশন ভাষা যা Spring Framework-এ ব্যবহৃত হয়। এটি XML কনফিগারেশন, অ্যানোটেশন, এবং Java কোডে বিভিন্ন ধরনের এক্সপ্রেশন (যেমন, প্রপার্টি এক্সপ্রেশন, মেথড কল, গণনা ইত্যাদি) ব্যবহার করার জন্য প্রয়োজনীয় সুবিধা প্রদান করে।


SpEL এর সুবিধাসমূহ

  • ডাইনামিক এক্সপ্রেশন: Spring Bean কনফিগারেশন এবং অ্যানোটেশন কনফিগারেশন ডাইনামিকভাবে নির্ধারণ করতে SpEL ব্যবহার করা যেতে পারে।
  • অবজেক্ট এক্সপ্রেশন: Bean এর প্রপার্টি, মেথড, এবং ফিল্ডে এক্সপ্রেশন ইভ্যালুয়েট করা।
  • অ্যারে/কলেকশন: অ্যারে, লিস্ট, সেট এবং ম্যাপের উপর এক্সপ্রেশন চালানো।
  • মেথড কলিং: SpEL এর মাধ্যমে মেথড কলিং করা।

SpEL এর বেসিক ব্যবহার

১. SpEL এক্সপ্রেশন সিঙ্ক্রোনাইজেশন

Spring-এর @Value অ্যানোটেশন SpEL এক্সপ্রেশন ব্যবহার করতে সাহায্য করে। এখানে একটি বেসিক উদাহরণ দেওয়া হল:

@Component
public class MyBean {
    @Value("#{2 + 3}")
    private int sum;

    public int getSum() {
        return sum;
    }
}

এখানে @Value("#{2 + 3}") স্পেল এক্সপ্রেশন ব্যবহার করে দুইটি সংখ্যার যোগফল নির্ধারণ করা হয়েছে। sum প্রপার্টি এখন ৫ হবে।

২. Bean প্রপার্টি এক্সপ্রেশন

Spring Bean-এর প্রপার্টি এক্সপ্রেশন ব্যবহার করে ডাইনামিকভাবে মান অ্যাসাইন করা যেতে পারে।

@Component
public class Person {
    private String name;
    private int age;

    // Getters and Setters

    @Override
    public String toString() {
        return "Name: " + name + ", Age: " + age;
    }
}

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

    @Bean
    public Person person() {
        return new Person();
    }
    
    @PostConstruct
    public void init() {
        ExpressionParser parser = new SpelExpressionParser();
        StandardEvaluationContext context = new StandardEvaluationContext();

        // Setting the values dynamically
        context.setVariable("person", person());
        parser.parseExpression("name = 'John'").getValue(context);
        parser.parseExpression("age = 30").getValue(context);
        
        System.out.println(person().toString());
    }
}

এখানে SpEL এক্সপ্রেশন name = 'John' এবং age = 30 দিয়ে Person Bean-এর প্রপার্টি ডাইনামিকভাবে সেট করা হয়েছে।

৩. SpEL ব্যবহার করে মেথড কল

SpEL ব্যবহার করে Spring Bean-এর মেথড কলও করা যায়। নিচে একটি উদাহরণ দেওয়া হয়েছে:

@Component
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

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

    @Bean
    public Calculator calculator() {
        return new Calculator();
    }

    @PostConstruct
    public void init() {
        ExpressionParser parser = new SpelExpressionParser();
        StandardEvaluationContext context = new StandardEvaluationContext();
        
        // Calling the add method dynamically via SpEL
        context.setVariable("calculator", calculator());
        int result = (int) parser.parseExpression("#calculator.add(5, 3)").getValue(context);
        
        System.out.println("Addition result: " + result);
    }
}

এখানে calculator.add(5, 3) এক্সপ্রেশন কল করে SpEL এর মাধ্যমে Calculator Bean-এর add মেথড কল করা হয়েছে এবং ফলাফল প্রিন্ট করা হয়েছে।


SpEL এর বেসিক সিনট্যাক্স

  • অপেন এক্সপ্রেশন: #{} চিহ্নের মধ্যে SpEL এক্সপ্রেশন লেখা হয়।
  • অ্যারিথমেটিক এক্সপ্রেশন: যোগফল, বিয়োগ, গুণফল, ভাগফল ইত্যাদি।

    #{5 + 3}     // ৮
    #{10 - 4}    // ৬
    #{2 * 6}     // ১২
    #{10 / 2}    // ৫
    
  • স্ট্রিং এক্সপ্রেশন: SpEL স্ট্রিং কনক্যাটেনেশনও সাপোর্ট করে।

    #{'Hello ' + 'World'}   // "Hello World"
    
  • বুলিয়ান এক্সপ্রেশন: তুলনা অপারেটর যেমন ==, !=, >, <, >=, <= ইত্যাদি।

    #{2 > 3}     // false
    #{5 == 5}    // true
    
  • অবজেক্ট প্রপার্টি এক্সপ্রেশন: Spring Bean এর প্রপার্টি থেকে মান রিট্রিভ করা।

    #{person.name}   // person Bean এর name প্রপার্টি রিট্রিভ করা
    

SpEL এর আরও কিছু ব্যবহার

১. কন্ডিশনাল এক্সপ্রেশন

SpEL-এ কন্ডিশনাল এক্সপ্রেশন ব্যবহার করে শর্তসাপেক্ষ এক্সপ্রেশন তৈরি করা যায়।

@Value("#{T(java.lang.Math).PI}")
private double pi; // PI constant from Math class

@Value("#{2 > 3 ? 'True' : 'False'}")
private String result; // Conditional expression

২. লিস্ট, সেট বা ম্যাপ ব্যবহার

SpEL ব্যবহার করে এক্সপ্রেশন থেকে লিস্ট, সেট বা ম্যাপেও এক্সেস করা যেতে পারে।

@Value("#{myList[0]}")
private String firstItem; // List এর প্রথম আইটেম

সারাংশ

Spring Expression Language (SpEL) একটি শক্তিশালী ভাষা যা Spring Beans এর মধ্যে ডাইনামিক এক্সপ্রেশন ব্যবহার করতে সহায়ক। এটি বিভিন্ন প্রকারের এক্সপ্রেশন যেমন গণনা, মেথড কলিং, এবং অবজেক্ট প্রপার্টি এক্সপ্রেশন ব্যবহারের মাধ্যমে Spring কনফিগারেশনকে আরও ডাইনামিক এবং ফ্লেক্সিবল করে তোলে। SpEL-এ Arithmetic, String Concatenation, Conditional Expressions, Object Access, এবং Method Calls এর মতো বেশ কিছু কার্যকর পদ্ধতি উপলব্ধ রয়েছে, যা Spring ভিত্তিক অ্যাপ্লিকেশনগুলির কার্যক্ষমতা এবং কনফিগারেশনকে সহজতর করে।

Content added By
Promotion

Are you sure to start over?

Loading...