Spring Expression Language (SpEL) হল একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Spring Framework-এর অংশ এবং বিভিন্ন Spring অ্যাপ্লিকেশনে ডাইনামিক এক্সপ্রেশন ও ডেটা ম্যানিপুলেশন পরিচালনা করতে ব্যবহৃত হয়। SpEL-এর মাধ্যমে আপনি JavaBeans প্রপার্টি অ্যাক্সেস করতে, মেথড কল করতে, কন্ডিশনাল লজিক প্রয়োগ করতে এবং আরও অনেক কিছু করতে পারেন।
SpEL-এর সাথে Annotations এর একটি গুরুত্বপূর্ণ সম্পর্ক রয়েছে। আপনি SpEL এক্সপ্রেশন ব্যবহার করে Spring Beans এবং অন্যান্য উপাদানগুলির মধ্যে কনফিগারেশন ডাইনামিকভাবে পরিবর্তন করতে পারেন, এবং বেশ কিছু Spring Annotations (যেমন @Value, @Autowired, @Bean ইত্যাদি) SpEL এর সাথে কাজ করার জন্য প্রস্তুত।
এই টিউটোরিয়ালে আমরা SpEL এবং কিছু গুরুত্বপূর্ণ Spring Annotations-এর মধ্যে সম্পর্ক এবং কিভাবে এগুলি একসাথে ব্যবহার করা যায় তা দেখব।
SpEL এবং @Value Annotation
Spring Framework-এ @Value Annotation ব্যবহার করে আপনি Spring Beans-এর প্রপার্টি বা কনফিগারেশন ফাইলের মান Inject করতে পারেন। SpEL এক্সপ্রেশন ব্যবহার করে আপনি কনফিগারেশনের মধ্যে ডাইনামিক মান Inject করতে পারবেন।
উদাহরণ ১: @Value Annotation ব্যবহার করে SpEL এক্সপ্রেশন
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Product {
@Value("#{20 * 2}") // SpEL Expression
private int price;
public int getPrice() {
return price;
}
}
এখানে @Value("#{20 * 2}") SpEL এক্সপ্রেশন ব্যবহার করে price প্রপার্টির মান ২০ * ২ (৪০) হিসেবে ইনজেক্ট করা হচ্ছে।
স্পষ্টীকরণ:
@Value("#{20 * 2}")দ্বারাpriceফিল্ডের মান ৪০ সেট হবে।- SpEL এক্সপ্রেশন একটি গাণিতিক অপারেশন সম্পাদন করছে।
SpEL এবং @Autowired Annotation
@Autowired Annotation ব্যবহার করে আপনি Spring Beans ইনজেক্ট করতে পারেন। যখন Bean-এর মধ্যে কোনো অন্য Bean ডিপেনডেন্সি ইনজেক্ট করতে হয়, তখন SpEL ব্যবহার করে ডাইনামিকভাবে Bean ইনজেক্ট করা যায়।
উদাহরণ ২: @Autowired Annotation এবং SpEL
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Order {
@Value("#{productService.getPrice()}")
private int price;
@Autowired
private Product productService;
public int getPrice() {
return price;
}
}
এখানে:
productServiceBean ইনজেক্ট করা হয়েছে@Autowiredএর মাধ্যমে।@Value("#{productService.getPrice()}")ব্যবহার করেproductServiceBean থেকেgetPrice()মেথডের মান ইনজেক্ট করা হয়েছে।
স্পষ্টীকরণ:
@Autowiredএবং SpEL এক্সপ্রেশন ব্যবহার করেProductBean-এ থাকাgetPrice()মেথডের রিটার্ন ভ্যালুOrderBean-এ Inject করা হয়েছে।
SpEL এবং @Bean Annotation
@Bean Annotation সাধারণত Spring Configuration ক্লাসে ব্যবহৃত হয়, যেখানে আপনি স্পষ্টভাবে কোন Bean তৈরি করতে চান। SpEL ব্যবহার করে আপনি Bean Definition এর মানকে ডাইনামিকভাবে পরিবর্তন করতে পারেন।
উদাহরণ ৩: @Bean Annotation এবং SpEL
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public int productPrice() {
return 50 * 2; // SpEL equivalent to "#{50 * 2}"
}
}
এখানে SpEL এক্সপ্রেশন সরাসরি @Bean মেথডের মধ্যে ব্যবহার করা হয়েছে।
স্পষ্টীকরণ:
productPrice()মেথডে SpEL এক্সপ্রেশন ব্যবহার করেproductPriceBean এর মান হিসাব করা হয়েছে (৫০ * ২)।
SpEL এবং @PostConstruct Annotation
@PostConstruct Annotation ব্যবহার করে আপনি কোনো মেথডকে ইনিশিয়ালাইজেশন পর্বে কল করতে পারেন, যেমন Bean তৈরি হওয়ার পর। SpEL এই ধরনের মেথডের মধ্যে ব্যবহার করা যেতে পারে ডাইনামিক অপারেশন বা কনফিগারেশন করতে।
উদাহরণ ৪: @PostConstruct এবং SpEL
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Discount {
@Value("#{20 * 0.1}")
private double discount;
@PostConstruct
public void init() {
System.out.println("Discount initialized: " + discount);
}
}
এখানে:
@Value("#{20 * 0.1}")ব্যবহার করেdiscountফিল্ডে SpEL এক্সপ্রেশন দিয়ে ২০ এর ১০% ইনজেক্ট করা হয়েছে।@PostConstructAnnotation দ্বারাinit()মেথড কল হলেdiscountপ্রপার্টির মান প্রিন্ট করা হবে।
স্পষ্টীকরণ:
- SpEL ব্যবহার করে
discountপ্রপার্টির মান অটোমেটিক ইনজেক্ট হয়ে গেছে, এবং@PostConstructদ্বারা সেটির মান প্রিন্ট করা হয়েছে।
SpEL এবং @ConfigurationProperties Annotation
Spring Boot অ্যাপ্লিকেশনে কনফিগারেশন প্রপার্টি ব্যবস্থাপনার জন্য @ConfigurationProperties ব্যবহৃত হয়। SpEL ব্যবহার করে এই প্রপার্টিগুলোর মধ্যে ডাইনামিক ক্যালকুলেশন বা কাস্টমাইজেশন করা যেতে পারে।
উদাহরণ ৫: @ConfigurationProperties এবং SpEL
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "product")
public class Product {
private String name;
private int price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
// Method to apply SpEL
public int getDiscountedPrice() {
return price - (price * 10 / 100); // Apply discount of 10%
}
}
এখানে:
@ConfigurationPropertiesব্যবহার করে কনফিগারেশন থেকেProductBean এর প্রপার্টি ইনজেক্ট করা হয়েছে।getDiscountedPrice()মেথডে SpEL এর মত কাজ করা হয়েছে, যা ডিসকাউন্ট অ্যাপ্লাই করে মূল দাম পরিবর্তন করে।
উপসংহার
Spring Expression Language (SpEL) এবং Spring Annotations একসাথে ব্যবহৃত হলে Spring অ্যাপ্লিকেশনে অনেক কার্যকরী ডাইনামিক ফিচার প্রদান করতে পারে। @Value, @Autowired, @Bean, @PostConstruct, এবং @ConfigurationProperties এই Annotations-এর মাধ্যমে SpEL ব্যবহার করে আপনি ডাইনামিক ডেটা ইনজেকশন, কনফিগারেশন ও প্রপার্টি ম্যানিপুলেশন করতে পারবেন। SpEL-এর সাহায্যে Spring Beans এবং অন্যান্য Spring উপাদানগুলির মধ্যে জটিল কনফিগারেশন এবং পরিবর্তন করা খুবই সহজ হয়ে ওঠে।
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 এর মধ্যে ব্যবহার করার মাধ্যমে কোডের নমনীয়তা এবং কার্যকারিতা অনেক বৃদ্ধি পায়। স্প্রিং ডেভেলপারদের জন্য এটি একটি অত্যন্ত গুরুত্বপূর্ণ টুল, যেটি ডাইনামিক এবং কাস্টমাইজড ডেটা প্রসেসিংয়ের জন্য সহায়ক।
Spring Expression Language (SpEL) এবং @Value অ্যানোটেশন একত্রে ব্যবহার করে Spring Beans-এ Expression Injection করা সম্ভব। @Value অ্যানোটেশন ব্যবহার করে SpEL এক্সপ্রেশন ইনজেক্ট করা হয় যা Spring কনফিগারেশন ফাইল বা ক্লাসের মধ্যে ডাইনামিক ভ্যালু ইনজেক্ট করতে সহায়ক। এটি Spring Beans-এর প্রপার্টি বা ফিল্ডে এক্সপ্রেশন ভিত্তিক মান ইনজেক্ট করার একটি সুবিধাজনক পদ্ধতি।
@Value অ্যানোটেশন কি?
@Value অ্যানোটেশন Spring Framework-এ ব্যবহৃত হয় যেকোনো Bean-এ কনস্ট্রাকটর, ফিল্ড বা মেথডের মাধ্যমে প্রপার্টি বা ভ্যালু ইনজেক্ট করার জন্য। এটি সাধারণত application.properties বা application.yml ফাইল থেকে মান পড়তে ব্যবহৃত হয়, তবে SpEL (Spring Expression Language) এর মাধ্যমে ডাইনামিক ভ্যালু ইনজেক্ট করাও সম্ভব।
Expression Injection using @Value with SpEL
SpEL ব্যবহার করে @Value অ্যানোটেশন এর মাধ্যমে এক্সপ্রেশন ইনজেক্ট করার জন্য ${} সেন্ট্যাক্স ব্যবহার করা হয়। এটির মাধ্যমে Spring Beans-এর ফিল্ড বা প্রপার্টিতে ডাইনামিক মান ইনজেক্ট করা যায়।
সেন্ট্যাক্স:
@Value("#{expression}")
এখানে, expression একটি SpEL এক্সপ্রেশন হতে হবে যা ডাইনামিক মান তৈরি করবে।
@Value অ্যানোটেশন ব্যবহার করে SpEL Expression Injection এর উদাহরণ
1. Basic Example
এখানে একটি সাধারণ উদাহরণ দেখানো হয়েছে যেখানে SpEL এক্সপ্রেশন ব্যবহার করে একটি Bean-এর প্রপার্টি ইনজেক্ট করা হচ্ছে:
উদাহরণ: SpEL ব্যবহার করে String ইনজেকশন
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Product {
@Value("#{2 * 10}")
private int price;
public int getPrice() {
return price;
}
}
এখানে, @Value("#{2 * 10}") SpEL এক্সপ্রেশনটি 2 * 10 এর মান 20 ইনজেক্ট করবে এবং এটি price প্রপার্টিতে সেভ হবে। getPrice() মেথডের মাধ্যমে এটি আউটপুট হিসেবে ২০ রিটার্ন করবে।
2. Property File থেকে Value Inject করা
application.properties বা application.yml ফাইল থেকে মান ইনজেক্ট করতে @Value অ্যানোটেশন ব্যবহার করা হয়। SpEL এক্সপ্রেশন ব্যবহার করে ডাইনামিক মানও ইনজেক্ট করা যায়।
উদাহরণ: application.properties থেকে মান ইনজেকশন
application.properties:
product.name=Laptop
product.discount=10
উদাহরণ: @Value অ্যানোটেশন ব্যবহার করে Inject করা
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Product {
@Value("${product.name}")
private String name;
@Value("#{${product.discount} * 0.1}")
private double discount;
public String getName() {
return name;
}
public double getDiscount() {
return discount;
}
}
এখানে, @Value("${product.name}") এবং @Value("#{${product.discount} * 0.1}") ব্যবহার করে application.properties ফাইল থেকে name এবং discount এর মান ইনজেক্ট করা হয়েছে। discount ফিল্ডে SpEL এক্সপ্রেশন ব্যবহার করা হয়েছে যেখানে 10 * 0.1 (যার মান হবে ১) রিটার্ন করবে।
3. Complex Expression Injection
SpEL এর মাধ্যমে আরও জটিল এক্সপ্রেশন এবং লজিক ব্যবহার করা সম্ভব, যেমন:
উদাহরণ: SpEL দিয়ে Conditional Expression
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class User {
@Value("#{user.age > 18 ? 'Adult' : 'Minor'}")
private String status;
private int age;
public String getStatus() {
return status;
}
public void setAge(int age) {
this.age = age;
}
}
এখানে, user.age এর উপর ভিত্তি করে একটি শর্ত চেক করা হচ্ছে, যদি বয়স ১৮-এর বেশি হয় তাহলে status হবে 'Adult', অন্যথায় 'Minor' হবে। user.age এখানে SpEL এক্সপ্রেশন হিসেবে ব্যবহার করা হয়েছে।
4. Injecting Bean References
Spring Beans-এর মধ্যে একে অপরকে রেফারেন্স করতে SpEL ব্যবহার করা যায়।
উদাহরণ: Injecting Bean Reference
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Order {
@Value("#{product.name}")
private String productName;
public String getProductName() {
return productName;
}
}
এখানে, product.name Spring Bean-এর Product ক্লাস থেকে name প্রপার্টি ইনজেক্ট করা হয়েছে।
সার্বিক উপসংহার
@Value অ্যানোটেশন এবং SpEL (Spring Expression Language) একত্রে ব্যবহার করে Spring Beans-এ Expression Injection একটি শক্তিশালী ফিচার। এটি ডাইনামিকভাবে প্রপার্টি বা ভ্যালু ইনজেক্ট করতে সক্ষম, যা Spring অ্যাপ্লিকেশনকে আরও নমনীয় এবং কাস্টমাইজযোগ্য করে তোলে। আপনি SpEL ব্যবহার করে static values, properties files থেকে ভ্যালু, conditional expressions, এবং bean references ইনজেক্ট করতে পারেন। এই পদ্ধতিটি Spring অ্যাপ্লিকেশনের মধ্যে আরও নমনীয়তা এবং কার্যকারিতা যোগ করে।
SpEL ব্যবহার করার জন্য Annotations
স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) স্প্রিং ফ্রেমওয়ার্কে বিভিন্ন অ্যানোটেশন দ্বারা ব্যবহার করা যেতে পারে। এগুলোর মধ্যে সবচেয়ে সাধারণ এবং কার্যকরী অ্যানোটেশনগুলো হল @Value এবং @Autowired, যেগুলোর মাধ্যমে SpEL এক্সপ্রেশন ব্যবহার করা সম্ভব। এই অ্যানোটেশনগুলোর মাধ্যমে আপনি স্প্রিং কনফিগারেশন, প্রপার্টি ভ্যালু এবং অন্যান্য ডাইনামিক মান ইনজেক্ট করতে পারেন।
১. @Value অ্যানোটেশন ব্যবহার করে SpEL
স্প্রিং @Value অ্যানোটেশনটি ব্যবহার করে আপনি স্প্রিং কনটেক্সটে SpEL এক্সপ্রেশন ইনজেক্ট করতে পারেন। এটি স্প্রিং কনফিগারেশন বা অন্যান্য প্রপার্টি ফাইল থেকে মান সংগ্রহের জন্য ব্যবহৃত হয় এবং SpEL এক্সপ্রেশন প্রয়োগ করতে দেয়।
উদাহরণ ১: SpEL এর মাধ্যমে ডাইনামিক প্রপার্টি ইনজেকশন
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class GreetingService {
@Value("#{ 10 + 20 }")
private int sum;
@Value("#{systemProperties['user.name']}")
private String userName;
public void displayInfo() {
System.out.println("Sum: " + sum);
System.out.println("User Name: " + userName);
}
}
ব্যাখ্যা:
@Value("#{ 10 + 20 }"): SpEL ব্যবহার করে গাণিতিক যোগফল করা হচ্ছে। এখানে10 + 20এর মান 30 রিটার্ন হবে এবংsumভেরিয়েবলে ইনজেক্ট হবে।@Value("#{systemProperties['user.name']}"): SpEL ব্যবহার করে সিস্টেম প্রপার্টিuser.nameএর মান অ্যাক্সেস করা হচ্ছে, যা বর্তমান ইউজারের নাম রিটার্ন করবে এবং তাuserNameভেরিয়েবলে ইনজেক্ট হবে।
আউটপুট:
Sum: 30
User Name: [User's Name]
২. @Value অ্যানোটেশন ব্যবহার করে কন্ডিশনাল SpEL
SpEL এর মাধ্যমে শর্তের ভিত্তিতে বিভিন্ন মান ইনজেক্ট করা যায়। এই ধরনের এক্সপ্রেশন সাধারণত Ternary operator (শর্তাধীন অপারেটর) ব্যবহার করে করা হয়।
উদাহরণ ২: Ternary অপারেটর ব্যবহার করে SpEL
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class UserService {
@Value("#{ user.age >= 18 ? 'Adult' : 'Minor' }")
private String userStatus;
public void displayUserStatus() {
System.out.println("User Status: " + userStatus);
}
}
ব্যাখ্যা:
@Value("#{ user.age >= 18 ? 'Adult' : 'Minor' }"): এখানে,user.age >= 18শর্তটি যাচাই করা হচ্ছে। যদি বয়স ১৮ বা তার বেশি হয়, তাহলে 'Adult' রিটার্ন হবে, অন্যথায় 'Minor' রিটার্ন হবে এবং এটিuserStatusভেরিয়েবলে ইনজেক্ট হবে।
আউটপুট:
User Status: Adult
৩. @Value অ্যানোটেশন ব্যবহার করে কনফিগারেশন প্রপার্টি ইনজেকশন
SpEL ব্যবহার করে কনফিগারেশন প্রপার্টি ফাইল থেকে ডাইনামিক মান ইনজেক্ট করা সম্ভব। স্প্রিং কনফিগারেশন ফাইলে ${} প্লেসহোল্ডার ব্যবহার করা হয় এবং SpEL #{} এক্সপ্রেশন এর মাধ্যমে মান অ্যাক্সেস করা হয়।
উদাহরণ ৩: প্রপার্টি ফাইল থেকে SpEL এর মাধ্যমে মান ইনজেক্ট
application.properties ফাইল:
app.name=Spring SpEL Example
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class ConfigService {
@Value("#{environment['app.name']}")
private String appName;
public void displayConfig() {
System.out.println("Application Name: " + appName);
}
}
ব্যাখ্যা:
@Value("#{environment['app.name']}"): স্প্রিং কনফিগারেশন ফাইল থেকেapp.nameপ্রপার্টি মান অ্যাক্সেস করা হচ্ছে এবংappNameভেরিয়েবলে ইনজেক্ট করা হচ্ছে।
আউটপুট:
Application Name: Spring SpEL Example
৪. @Value অ্যানোটেশন ব্যবহার করে কন্ডিশনাল কনফিগারেশন
কোনো নির্দিষ্ট কন্ডিশনের উপর ভিত্তি করে কনফিগারেশন ফাইলের মান ইনজেক্ট করার জন্য SpEL এর Ternary operator ব্যবহার করা যেতে পারে।
উদাহরণ ৪: কন্ডিশনাল কনফিগারেশন
application.properties ফাইল:
app.environment=development
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AppConfig {
@Value("#{systemProperties['app.environment'] == 'development' ? 'Development Mode' : 'Production Mode'}")
private String appMode;
public void displayAppMode() {
System.out.println("App Mode: " + appMode);
}
}
ব্যাখ্যা:
@Value("#{systemProperties['app.environment'] == 'development' ? 'Development Mode' : 'Production Mode'}"): SpEL ব্যবহার করেapp.environmentপ্রপার্টির মান চেক করা হচ্ছে। যদি তা 'development' হয়, তাহলে 'Development Mode' রিটার্ন হবে, অন্যথায় 'Production Mode' রিটার্ন হবে।
আউটপুট:
App Mode: Development Mode
৫. SpEL ব্যবহার করে Static Method Call
SpEL এর মাধ্যমে আপনি স্প্রিং কনফিগারেশন ফাইল বা কোডে স্ট্যাটিক মেথড কলও করতে পারেন।
উদাহরণ ৫: স্ট্যাটিক মেথড কল
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MathService {
@Value("#{T(java.lang.Math).PI}")
private double piValue;
public void displayPiValue() {
System.out.println("Value of Pi: " + piValue);
}
}
ব্যাখ্যা:
@Value("#{T(java.lang.Math).PI}"): SpEL এর মাধ্যমেMath.PIএর মান অ্যাক্সেস করা হচ্ছে, যা গাণিতিক পাই-এর মান রিটার্ন করবে (3.14159...).
আউটপুট:
Value of Pi: 3.141592653589793
সারাংশ
SpEL (Spring Expression Language) স্প্রিং অ্যানোটেশনগুলির মাধ্যমে অত্যন্ত শক্তিশালী এবং নমনীয় কনফিগারেশন এবং প্রপার্টি ইনজেকশন সুবিধা প্রদান করে। @Value অ্যানোটেশন ব্যবহার করে SpEL এক্সপ্রেশন ইনজেক্ট করা সম্ভব, যা ডাইনামিক কনফিগারেশন, গাণিতিক হিসাব, শর্তানুযায়ী মান নির্ধারণ এবং স্ট্যাটিক মেথড কল করতে সহায়ক। এটি স্প্রিং অ্যাপ্লিকেশনগুলিকে আরও নমনীয় এবং শক্তিশালী করে তোলে।
Read more