Spring Expression Language (SpEL) স্প্রিং ফ্রেমওয়ার্কের মধ্যে এক্সপ্রেশন ম্যানিপুলেশন করার জন্য একটি শক্তিশালী ভাষা। SpEL-এ আপনি Spring Beans এবং অন্যান্য স্প্রিং কনফিগারেশন এর মধ্যে ডাইনামিকভাবে এক্সপ্রেশন ব্যবহার করতে পারেন। SpEL স্প্রিং এর বিভিন্ন Annotation-এর সাথে ব্যবহার করা যায়, যেমন @Value, @Autowired, @Bean, @PostConstruct, @PreDestroy, এবং আরও অনেক অন্যান্য।
এখানে দেখানো হবে কিভাবে SpEL বিভিন্ন স্প্রিং অ্যানোটেশনের মধ্যে ব্যবহার করা হয় এবং কীভাবে এগুলি Spring Beans এবং কনফিগারেশনে ডাইনামিকভাবে প্রোপার্টি, ভ্যালু এবং মেথড কল সেট করতে সহায়তা করে।
1. @Value Annotation এ SpEL ব্যবহার
@Value অ্যানোটেশন স্প্রিং ফ্রেমওয়ার্কে স্প্রিং Beans-এর প্রপার্টি ইনজেকশন করতে ব্যবহৃত হয়। SpEL ব্যবহার করে আপনি Spring Beans বা কনফিগারেশনে ডাইনামিক ভ্যালু ইনজেক্ট করতে পারেন।
উদাহরণ: @Value দিয়ে SpEL ব্যবহার
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class SpELExample {
@Value("#{T(java.lang.Math).PI}")
private double piValue;
@Value("#{2 * 3}")
private int multiplicationResult;
@Value("#{systemProperties['user.name']}")
private String userName;
public void printValues() {
System.out.println("PI Value: " + piValue);
System.out.println("Multiplication Result: " + multiplicationResult);
System.out.println("System User: " + userName);
}
}
ব্যাখ্যা:
@Value("#{T(java.lang.Math).PI}"):Math.PIএর মান ইনজেক্ট করা হচ্ছে।@Value("#{2 * 3}"): ২ এবং ৩ এর গুণফল ইনজেক্ট করা হচ্ছে।@Value("#{systemProperties['user.name']}"): সিস্টেম প্রপার্টিuser.nameইনজেক্ট করা হচ্ছে।
2. @Autowired Annotation এ SpEL ব্যবহার
@Autowired অ্যানোটেশন স্প্রিং ফ্রেমওয়ার্কে ডিপেনডেন্সি ইনজেকশন (DI) করার জন্য ব্যবহৃত হয়। SpEL ব্যবহার করে ডাইনামিকভাবে ডিপেনডেন্সি ইনজেকশন করা যেতে পারে, যেমন কলব্যাক মেথড, মেথড ইনজেকশন ইত্যাদি।
উদাহরণ: @Autowired দিয়ে SpEL ব্যবহার
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class OrderService {
@Autowired
private ProductService productService;
public void printProductInfo() {
System.out.println("Product Name: " + productService.getProductName());
}
}
@Component
public class ProductService {
public String getProductName() {
return "Laptop";
}
}
ব্যাখ্যা:
এখানে @Autowired স্প্রিং কনটেইনার থেকে ডিপেনডেন্সি ইনজেক্ট করছে, যা ProductService এর ইনস্ট্যান্স OrderService-এ ইনজেক্ট হচ্ছে।
3. @Bean Annotation এ SpEL ব্যবহার
@Bean অ্যানোটেশন স্প্রিং কনফিগারেশন ক্লাসে মেথড থেকে স্প্রিং Bean তৈরি করতে ব্যবহৃত হয়। SpEL ব্যবহার করে আপনি ডাইনামিকভাবে Bean-এ ভ্যালু সেট করতে পারেন।
উদাহরণ: @Bean দিয়ে SpEL ব্যবহার
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public int multiplyNumbers() {
return 2 * 3; // SpEL used here for dynamic calculation
}
}
ব্যাখ্যা:
এখানে multiplyNumbers() মেথডে SpEL ব্যবহার করা হয়েছে ২ এবং ৩ এর গুণফল বের করার জন্য। এই Bean স্প্রিং কনটেইনারে তৈরি হবে এবং প্রয়োজনে Inject করা যাবে।
4. @PostConstruct Annotation এ SpEL ব্যবহার
@PostConstruct অ্যানোটেশনটি একটি মেথডকে স্পষ্ট করে দেয় যা Bean তৈরি হওয়ার পরে এবং Dependency Injection হওয়ার পরে স্বয়ংক্রিয়ভাবে রান হয়। SpEL ব্যবহার করে আপনি এই মেথডে ডাইনামিক ভ্যালু সেট করতে পারেন।
উদাহরণ: @PostConstruct দিয়ে SpEL ব্যবহার
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class MyComponent {
@Value("#{2 + 3}")
private int sum;
@PostConstruct
public void init() {
System.out.println("Sum is: " + sum); // Dynamically set using SpEL
}
}
ব্যাখ্যা:@PostConstruct অ্যানোটেশন ব্যবহার করে init() মেথডটি Bean ইন্সট্যান্স হওয়া পরপরই কল হবে, এবং SpEL এর মাধ্যমে sum ফিল্ডের মান সেট করা হবে।
5. @PreDestroy Annotation এ SpEL ব্যবহার
@PreDestroy অ্যানোটেশনটি একটি মেথডকে স্পষ্ট করে দেয় যা Bean ধ্বংস হওয়ার আগে রান হয়। আপনি SpEL ব্যবহার করে এই মেথডে ডাইনামিক কাজ করতে পারেন।
উদাহরণ: @PreDestroy দিয়ে SpEL ব্যবহার
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
@Component
public class CleanupComponent {
@PreDestroy
public void cleanup() {
System.out.println("Cleaning up resources..."); // Can use SpEL for dynamic cleanup
}
}
ব্যাখ্যা:@PreDestroy অ্যানোটেশন ব্যবহার করে Bean ধ্বংসের আগে cleanup() মেথডটি কল হবে।
SpEL এর সাহায্যে বিভিন্ন Annotation এর মাধ্যমে ডাইনামিক ভ্যালু, কন্ডিশনাল লজিক এবং মেথড কল করা সহজ হয়। এটি Spring Beans বা কনফিগারেশন ফাইলগুলির মধ্যে ভ্যালু ইনজেকশন, ডিপেনডেন্সি ইনজেকশন এবং কার্যকরী লজিক সহজভাবে বাস্তবায়ন করতে সহায়তা করে।
উপসংহার
SpEL (Spring Expression Language) স্প্রিং ফ্রেমওয়ার্কের বিভিন্ন Annotation এর মধ্যে ব্যবহার করার মাধ্যমে কোডের নমনীয়তা এবং কার্যকারিতা অনেক বৃদ্ধি পায়। স্প্রিং ডেভেলপারদের জন্য এটি একটি অত্যন্ত গুরুত্বপূর্ণ টুল, যেটি ডাইনামিক এবং কাস্টমাইজড ডেটা প্রসেসিংয়ের জন্য সহায়ক।
Read more