স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) স্প্রিং ফ্রেমওয়ার্কে ব্যবহৃত একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা ডাইনামিক এক্সপ্রেশন ইভ্যালুয়েশন এবং কনফিগারেশন ফাইলগুলোর মধ্যে property এবং bean অ্যাক্সেসের জন্য ব্যবহৃত হয়। স্প্রিং অ্যাপ্লিকেশনের কনফিগারেশন এবং ডেটা অ্যাক্সেস সহজ করতে SpEL বিশেষভাবে কার্যকর।
১. Property Access (প্রোপার্টি অ্যাক্সেস)
স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজের মাধ্যমে সহজেই কোনো bean এর প্রোপার্টি অ্যাক্সেস করা যায়। এটি ${} সিঙ্কট্যাক্স ব্যবহার করে লেখা হয়।
Property Access এর উদাহরণ
public 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;
}
}
// Spring configuration using SpEL to access properties
@Component
public class Employee {
@Value("#{person.name}")
private String employeeName;
@Value("#{person.age + 5}")
private int employeeAge;
// Getter methods
public String getEmployeeName() {
return employeeName;
}
public int getEmployeeAge() {
return employeeAge;
}
}
ব্যাখ্যা:
#{person.name}SpEL এক্সপ্রেশনটিpersonBean এরnameপ্রোপার্টি অ্যাক্সেস করবে।#{person.age + 5}SpEL এক্সপ্রেশনটিpersonBean এরageপ্রোপার্টি এর উপর গাণিতিক অপারেশন করবে।
২. Bean Access (Bean অ্যাক্সেস)
স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজের মাধ্যমে স্প্রিং কনটেইনারে থাকা যেকোনো bean অ্যাক্সেস করা সম্ভব। এটি @{} সিঙ্কট্যাক্স ব্যবহার করে করা হয়।
Bean Access এর উদাহরণ
@Component
public class Address {
private String city;
public Address(String city) {
this.city = city;
}
public String getCity() {
return city;
}
}
@Component
public class Employee {
@Value("#{address.city}")
private String city;
// Getter method
public String getCity() {
return city;
}
}
ব্যাখ্যা:
#{address.city}SpEL এক্সপ্রেশনটিaddressBean থেকেcityপ্রোপার্টি অ্যাক্সেস করবে।- স্প্রিং কনটেইনারে
AddressBean এবংEmployeeBean এর মধ্যে ডিপেনডেন্সি ইনজেকশন সঠিকভাবে কাজ করবে।
৩. Bean Creation এবং Method Access (Bean সৃষ্টি এবং মেথড অ্যাক্সেস)
SpEL এর মাধ্যমে শুধু Property নয়, Method এবং Constructor থেকেও ডেটা অ্যাক্সেস করা যেতে পারে। স্প্রিং কনটেইনার থেকে কোনো Bean তৈরি করা এবং সেই Bean এর মেথড বা কনস্ট্রাকটর অ্যাক্সেস করা সম্ভব।
Bean Creation এবং Method Access উদাহরণ
@Component
public class Employee {
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
@Component
public class EmployeeService {
@Value("#{new com.example.Employee('John Doe')}")
private Employee employee;
public String getEmployeeName() {
return employee.getName();
}
}
ব্যাখ্যা:
new com.example.Employee('John Doe')SpEL এক্সপ্রেশনটিEmployeeBean তৈরি করে এবংnameপ্রোপার্টি সেট করে।- স্প্রিং কনটেইনার থেকে নতুন
EmployeeBean ইনস্ট্যান্স তৈরি হয় এবং এটিemployeeServiceBean এর মধ্যে ইনজেক্ট করা হয়।
৪. Static Method Access (স্ট্যাটিক মেথড অ্যাক্সেস)
SpEL এর মাধ্যমে স্ট্যাটিক মেথড অ্যাক্সেস করা যায়। এর জন্য T() অপারেটর ব্যবহার করা হয়।
Static Method Access উদাহরণ
public class Utility {
public static String getGreeting(String name) {
return "Hello, " + name;
}
}
@Component
public class EmployeeService {
@Value("#{T(com.example.Utility).getGreeting('John')}")
private String greeting;
public String getGreeting() {
return greeting;
}
}
ব্যাখ্যা:
T(com.example.Utility).getGreeting('John')SpEL এক্সপ্রেশনটিUtilityক্লাসের স্ট্যাটিক মেথডgetGreetingকল করে এবং'John'আর্গুমেন্ট পাস করে।
৫. Accessing List or Array (List বা Array অ্যাক্সেস)
SpEL এর মাধ্যমে List বা Array এর উপাদানও অ্যাক্সেস করা যেতে পারে। এটি [] ব্যবহার করে করা হয়।
List বা Array অ্যাক্সেস উদাহরণ
@Component
public class EmployeeService {
@Value("#{employeeList[0]}")
private String firstEmployee;
// Getter method
public String getFirstEmployee() {
return firstEmployee;
}
}
ব্যাখ্যা:
employeeList[0]SpEL এক্সপ্রেশনটিemployeeListএর প্রথম উপাদান অ্যাক্সেস করবে।
উপসংহার
স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) একটি অত্যন্ত শক্তিশালী এবং নমনীয় টুল যা স্প্রিং ফ্রেমওয়ার্কে ডাইনামিক এক্সপ্রেশন কনফিগারেশন এবং ডেটা এক্সপ্রেশন প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। Property এবং Bean Access এর সাহায্যে, স্প্রিং কনটেইনারে থাকা Bean এর প্রোপার্টি, মেথড এবং কনস্ট্রাকটর অ্যাক্সেস করা সহজ হয়, যা কোডের নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা বাড়ায়।